この質問は、別の質問に対するこの回答に触発されたもので、次のように定義された関数を使用して、リストから要素のすべての出現を削除できることを示しています。
removeall = filter . (/=)
filter
、、 の型から紙と鉛筆で計算する(/=)
と(.)
、関数には の型があります。
removeall :: (Eq a) => a -> [a] -> [a]
これは、契約に基づいて期待するものとまったく同じです。ただし、GHCi 6.6 では、
gchi> :t removeall
removeall :: Integer -> [Integer] -> [Integer]
タイプを明示的に指定しない限り(その場合は正常に機能します)。Haskell が関数の特定の型を推論するのはなぜですか?