Go での fmap のエミュレーション: 実践的なアプローチ
Go では、Haskell の型クラスの表現力をエミュレートすることには課題が伴います。そのような例の 1 つは、関数型プログラミングの基本的な操作である fmap のエミュレーションです。
課題
Go で fmap を実装する次の試みを考えてみましょう。
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 }
Go メソッドでは新しい型パラメータを導入できないため、この実装は失敗します。その結果、fmap メソッドは B 型にアクセスできなくなります。
実用的な解決策
Go で型クラスをエミュレートするためのジェネリックスとメソッドの使用には制限がありますが、可能です。 fmap をトップレベル関数として実装するには:
func Fmap[A, B any](sa S[A], f func(A) B) S[B] { return S[B]{contents: f(sa.contents)} }
このアプローチは、Go の制約なしで必要な機能を提供します。タイプシステム。ただし、そのようなエミュレーションが Go の慣用的なアプローチと一致するかどうかを評価することが重要です。
以上がGo で Haskell の「fmap」を効果的にエミュレートするにはどうすればよいでしょうか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。