Maison > développement back-end > Golang > Comment pouvons-nous émuler efficacement le « fmap » de Haskell dans Go ?

Comment pouvons-nous émuler efficacement le « fmap » de Haskell dans Go ?

Patricia Arquette
Libérer: 2024-12-18 18:48:14
original
762 Les gens l'ont consulté

How Can We Effectively Emulate Haskell's `fmap` in Go?

É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
}
Copier après la connexion

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)}
}
Copier après la connexion

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!

source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Derniers articles par auteur
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal