ハスケル:型推論と関数合成
-
20-09-2019 - |
質問
この質問はこれに触発されたものです 答え 別の質問では、次のように定義された関数を使用して、リストから出現するすべての要素を削除できることを示しています。
removeall = filter . (/=)
鉛筆と紙を使って、 filter
, (/=)
そして (.)
, 、関数の型は次のとおりです。
removeall :: (Eq a) => a -> [a] -> [a]
これはまさに契約に基づいて期待されるものです。ただし、GHCi 6.6 では、
gchi> :t removeall
removeall :: Integer -> [Integer] -> [Integer]
型を明示的に指定しない限り (その場合は正常に動作します)。Haskell が関数に対してそのような特定の型を推論するのはなぜですか?
他のヒント
式に名前を割り当てないと、typechecker は型のデフォルト化を回避するようであることにも注目してください。
Prelude> :t filter . (/=)
filter . (/=) :: (Eq a) => a -> [a] -> [a]
所属していません StackOverflow