ホームページ > バックエンド開発 > Golang > Go で Haskell の「fmap」を効果的にエミュレートするにはどうすればよいでしょうか?

Go で Haskell の「fmap」を効果的にエミュレートするにはどうすればよいでしょうか?

Patricia Arquette
リリース: 2024-12-18 18:48:14
オリジナル
761 人が閲覧しました

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

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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
著者別の最新記事
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート