特定のタイプのクラスの関数を使用していて、どのような具体的な型を指定していない場合でも、GHCIではこのことが少し混乱します。次のコードを考えてみましょう:ghciのジェネリック関数の結果を表示する
pure (1+) <*> pure 1
> 2
私はそれを理解する方法、あなたはGHCiのに何かを入力すると、それは式を評価し、その上にputStrLn . show
を呼び出します。しかし、どのようにこれを評価することができますか?なぜこれは2ですか?つまり、それは理にかなっており、ほとんどのApplicativeインスタンスではおそらく2ですが、確かに知る方法はありません。私たちは式の型をチェックすると、我々が得る:十分
pure (1+) <*> pure 1 :: (Num b, Applicative f) => f b
OK、公正、種類が合理的に見えますが、任意の型クラスのインスタンスが、指定がなかったので、GHCiの/ Haskellはときに呼び出すように機能するのか分かりませんでしたか私はpure
/<*>
と書いていますか?
他の言語の直感では、これはエラーであるはずです。 OOP言語で静的にインスタンスメソッドを静的に呼び出そうとしているようなものです(明らかに同じではありませんが、私が得ているような感じです)。
ここでは何が起こっていますか?
デフォルトのタイプはhttps://downloads.haskell.org/~ghc/latest/docs/html/users_guide/interactive-evaluation.html#extended-default-rulesです。また、ghciがIOモナドで動作するとき、 'f'は' IO'に解決されます。 – zakyggaps
ありがとう!私が受け入れることができるように答えを投稿してもらえますか? – kai