J'essaie de porter des parties d'une bibliothèque Haskell pour la programmation de type de données générique vers Scala. Voici le problème que j'ai rencontré:Scala: paramètres de type multiple pour la classe implicite
J'ai défini un trait, Generic
, avec un paramètre de type conteneur:
trait Generic[G[_]] {
// Some function declarations go here
}
Maintenant, j'ai une classe abstraite, Collect
, avec trois paramètres de type, et une déclaration de fonction (il signifie un type que peut recueillir tous les subvalues de type B
dans un récipient de type F[_]
d'une certaine structure de type A
):
abstract class Collect[F[_],B,A] {
def collect_ : A => F[B]
}
pour faire étendre générique, les deux paramètres de type premier F[_]
et B
sont donnés, et A
est cari (cet effet est simulé à l'aide lambdas de type):
class CollectC[F[_],B] extends Generic[({type C[A] = Collect[F,B,A]})#C] {
// Function definitions go here
}
Le problème est que j'ai besoin de la dernière définition de classe pour être implicite , parce que plus tard dans mon code, je dois être capable d'écrire des fonctions comme
class GUnit[G[_]](implicit gg: Generic[G]) {
// Some definitions
}
Quand je PREPEND implicit
à simplement la définition de la classe, je reçois l'erreur en disant implicit classes must accept exactly one primary constructor parameter
. Quelqu'un at-il rencontré un problème similaire? Existe-t-il un moyen connu de contourner ce problème? Je ne vois pas actuellement comment je pourrais refactoriser mon code tout en gardant la même fonctionnalité, donc tout conseil est le bienvenu. Merci d'avance!
Cela a été très utile, merci! – Rrr