Maison > développement back-end > Golang > Comment puis-je émuler efficacement le « fmap » de Haskell dans Go en utilisant des génériques ?

Comment puis-je émuler efficacement le « fmap » de Haskell dans Go en utilisant des génériques ?

Susan Sarandon
Libérer: 2024-12-15 11:22:09
original
387 Les gens l'ont consulté

How Can I Effectively Emulate Haskell's `fmap` in Go Using Generics?

Émulation de fmap dans Go

En essayant d'émuler le comportement de mappage fonctionnel de fmap dans Go à l'aide de génériques et de méthodes, les développeurs peuvent rencontrer un type problème d'inférence où l'implémentation ne peut pas accéder à un type générique défini dans l'interface. Cette erreur provient de la limitation des méthodes Go à utiliser des types paramétrés comme arguments au-delà du type récepteur.

Pour résoudre cette contrainte, la solution de contournement courante consiste à implémenter fmap en tant que fonction de niveau supérieur plutôt qu'en tant que méthode. En déclarant fmap en dehors de la définition de type, il accède aux types génériques nécessaires, permettant une fonctionnalité de mappage appropriée.

Considérez l'exemple suivant :

package main

import "fmt"

type S[A any] struct {
    contents A
}

func Fmap[A, B any](sa S[A], f func(A) B) S[B] {
    return S[B]{contents: f(sa.contents)}
}

func main() {
    ss := S[string]{"foo"}
    f := func(s string) int { return len(s) }
    fmt.Println(Fmap(ss, f)) // {3}
}
Copier après la connexion

Cette approche adhère au type de Go. système tout en fournissant la fonctionnalité de cartographie souhaitée, bien que via une stratégie de mise en œuvre différente. Cependant, il est crucial de considérer la pertinence de traduire les concepts d'autres langues vers Go d'une manière qui semble naturelle au sein de l'écosystème 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