Emulierung von fmap in Go: Ein praktischer Ansatz
In Go stellt die Emulation der Ausdruckskraft von Haskells Typklassen eine Herausforderung dar. Ein solches Beispiel ist die Emulation von fmap, einer grundlegenden Operation in der funktionalen Programmierung.
Die Herausforderung
Betrachten Sie den folgenden Versuch, fmap in Go zu implementieren:
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 }
Diese Implementierung schlägt fehl, weil Go-Methoden keine neuen Typparameter einführen können. Daher kann die fmap-Methode nicht auf den B-Typ zugreifen.
Eine praktische Lösung
Die Verwendung von Generika und Methoden zur Emulation von Typklassen in Go hat zwar Einschränkungen, ist aber möglich So implementieren Sie fmap als Funktion der obersten Ebene:
func Fmap[A, B any](sa S[A], f func(A) B) S[B] { return S[B]{contents: f(sa.contents)} }
Dieser Ansatz bietet die gewünschte Funktionalität ohne die Einschränkungen des Go-Typsystems. Es ist jedoch von entscheidender Bedeutung zu bewerten, ob eine solche Emulation mit dem idiomatischen Ansatz in Go übereinstimmt.
Das obige ist der detaillierte Inhalt vonWie können wir Haskells „fmap' in Go effektiv emulieren?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!