uncurry
GHCiの機能で遊んでいたのですが、なかなか手に入らないものを見つけました。関数に適用uncurry
し、(+)
それを以下のコードのように変数にバインドすると、コンパイラーはその型が特定のものであると推測しますInteger
。
Prelude> let add = uncurry (+)
Prelude> :t add
add :: (Integer, Integer) -> Integer
ただし、次の式のタイプを尋ねると、正しい結果が得られます(私が期待するもの)。
Prelude> :t uncurry (+)
uncurry (+) :: (Num a) => (a, a) -> a
何が原因でしょうか?それはGHCiに特有ですか?
同じことが。にも当てはまりますlet add' = (+)
。
注:コンパイルされたファイルを使用してそれを再現することはできませんでした。