5

私はLYAHを読んでいました。Control.Monad.Instances次の構文を機能させるには、明示的にロードする必要があると表示されます。

( ( fmap (+5) ) (+5) ) 4

何故ですか?Control.Monad.Instancesファンクターがこの基盤となる統合テクノロジーである場合、その機能を取得するために明示的にロードする必要があるのはなぜですか。(->)はそれなしでどのように実装されますか(または単に非表示にされて->エクスポートされるだけです)?fmapデフォルトでover関数型の使用が実装されていないのはなぜですか?

4

2 に答える 2

10

ここには 3 つの異なる概念が含まれます。関数型、Functor 型クラス、および Functor の「インスタンス」。関数型 (->) は言語に組み込まれており、その存在と実装は Functor や fmap とはまったく関係ありません。型クラスは、関連するメソッドのシグネチャの仕様です。「インスタンス」はその署名の実装です。

あなたの質問をより明確にするために、「プレリュードで (->) の Functor インスタンスが提供されないのはなぜですか?」と言い換えます。(プレリュードは、デフォルトでスコープ内にあるモジュールです)。現在の言い回しであるため、あまり意味がありません。

変更された質問に対する答えは簡単です。Haskell レポート (Prelude のインターフェースが指定されている公式の言語仕様) にはそれが含まれていません。おそらくそうすべきですが、Haskell 言語とライブラリはそれ以来大きく進化しており、Haskell 標準はゆっくりと変化する傾向があります。いずれにせよ、正しいか間違っているか、それが理由です。

于 2010-11-18T13:58:44.227 に答える
2

Functor は言語機能ではなく、ランダム モジュールがたまたま定義する便利な型クラスです。そのモジュールの Functor の定義を使用するには、それをロードする必要があります。

于 2010-11-18T03:34:25.250 に答える