この質問は、優秀なファンタジーの新しい章を読んでいる間に、アプリケーション・ファンクターについてのハスケルです。ハスケルはどのtypeclassインスタンスを意味するのですか?
のApplicative型クラスは、たぶん、インスタンスの定義の一部として、があります。
pure = Just
私はちょうどGHCiのと輸入Control.Applicativeに行き、そしてそうした場合:
pure (3+)
Iドンちょうど何かを得る(意味をなさない)。私は式の一部でそれを使用する場合でも:
pure (3+) <*> Just 4
私はそこにあることを、私はそれはまた、驚くべきことではないと思いますが、私は型クラスがどのように動作するかについての不可欠な何かが欠けている、と思うだけで7を取得しますpure
へのコールとあいまいさはありません。
私の混乱が理にかなっている場合は、誰でも詳細なことを説明できますか?
ああ、コンパイラは "うーん、この引数の型はあいまいなので、次の引数の型をチェックして戻ってくる"のようなことをしますか? –
型推論はかなり複雑ですが、それは一段階で起こらないことを知る価値があります。型推論は、通常、あるステップでいくつかの情報を収集し、後の段階ではいくつかの情報を収集します。つまり、左から右に向かって、すべてのものに対して正しいタイプを推論するだけではありません。この場合、純粋な型は 'a1(Int-> Int)'型であり、 'a1'は単にタイプアップされた型変数であり、型推論の後の段階では(Applicative a1)=> a1 'a1'は' Maybe'でなければならないと結論づけ、どこでも 'a1'を' Maybe'に置き換えます。 –
ありがとうございます - それはとても役に立ちます! –