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
Patricia Arquetteoriginal
2024-12-18 18:48:14851parcourir

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
}

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!

Déclaration:
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