Émuler fmap dans Go : une approche pratique
Dans Go, émuler le pouvoir expressif des classes de types de Haskell présente des défis. Un tel exemple est l'émulation de fmap, une opération fondamentale dans la programmation fonctionnelle.
Le défi
Considérez la tentative suivante d'implémentation de fmap dans Go :
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 }
Cette implémentation échoue car les méthodes Go ne peuvent pas introduire de nouveaux paramètres de type. Par conséquent, la méthode fmap ne peut pas accéder au type B.
Une solution pratique
Bien que l'utilisation de génériques et de méthodes pour émuler les classes de types dans Go ait des limites, il est possible pour implémenter fmap en tant que fonction de niveau supérieur :
func Fmap[A, B any](sa S[A], f func(A) B) S[B] { return S[B]{contents: f(sa.contents)} }
Cette approche fournit la fonctionnalité souhaitée sans les contraintes du système de types de Go. Cependant, il est crucial d'évaluer si une telle émulation s'aligne sur l'approche idiomatique de Go.
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!