私はHaskellのを学んでいる、と私は非常に不可解な何かに出くわしたとき、私はGHCiの中で遊んでました。このghciセッションのタイプでは何が起こっていますか?
まず、簡単な追加機能を作成します。それはint型で動作し、浮くこと
Prelude> let add x y = x + y
注:
Prelude> add 3 4
7
Prelude> add 2.5 1.3
3.8
を今すぐ適用する関数を作成します。これは$
と同じです(中置ではありません)。これは、アドオンの上に無操作のように動作します:
Prelude> let apply f x = f x
Prelude> apply add 3 4
7
Prelude> apply add 2.5 1.3
3.8
[OK]を、今add'
と同じですがapply
を使用しているadd'
します
Prelude> let add' = apply add
Prelude> add' 3 4
7
Prelude> add' 2.5 1.3
<interactive>:1:9:
No instance for (Fractional Integer)
arising from the literal `1.3' at <interactive>:1:9-11
Possible fix: add an instance declaration for (Fractional Integer)
In the second argument of `add'', namely `1.3'
In the expression: add' 2.5 1.3
In the definition of `it': it = add' 2.5 1.3
ワット。
ここは種類があります:
Prelude> :t add
add :: (Num a) => a -> a -> a
Prelude> :t apply add
apply add :: (Num t) => t -> t -> t
Prelude> :t add'
add' :: Integer -> Integer -> Integer
Prelude>
はなぜadd'
はapply add
とは異なるタイプがありますか?
これはのGHCi風変わりです、または一般的にはHaskellでこれは本当でしょうか? (そして、どのように私は違いを見分けることができますか?)
はできるだけ早く私が聞くと「私はGHCiの中で遊んでいたと私は奇妙な何かを見て、」私が思うに、「単相性制限」 – amindfv