Émulation du fmap de Haskell dans Go
L'incapacité d'avoir des arguments de méthode utilisant des types paramétrés présente un défi lors de l'émulation de classes de types Haskell dans Go. Prenons l'exemple suivant qui tente d'émuler fmap :
type S[A any] struct { contents A } type Functor [A any, B any] interface{ fmap(f func(A)B) B } func (x S[A]) fmap (f func(A)B) S[B] { x.contents = f(x.contents) return x }
Ce code échoue en raison du type B non défini dans l'implémentation de l'interface.
Solution de contournement utilisant une fonction de niveau supérieur
Étant donné que les méthodes Go ne peuvent pas introduire de nouveaux paramètres de type, une solution de contournement consiste à implémenter fmap en tant que paramètre de niveau supérieur. function :
func Fmap[A, B any](sa S[A], f func(A) B) S[B] { return S[B]{contents: f(sa.contents)} }
Approches alternatives
Bien que cette solution de contournement résolve le problème immédiat, elle souligne que l'émulation des classes de types Haskell à l'aide de génériques et de méthodes n'est pas une entreprise simple dans Go . Des approches alternatives pourraient impliquer :
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!