baz
の型宣言が追加されると、このコードは壊れます。
baz (x:y:_) = x == y
baz [_] = baz []
baz [] = False
一般的な説明 (例については、推論された型を宣言できないのはなぜですか?を参照) は、多相再帰が原因であるというものです。
しかし、その説明は、別のポリモーフィックな再帰的な例で効果が消える理由を説明していません:
foo f (x:y:_) = f x y
foo f [_] = foo f []
foo f [] = False
また、GHC が再帰が型宣言なしで単相的であると考える理由も説明していません。
http://www.haskell.org/onlinereport/decls.html#sect4.5.5reads
の例の説明は私のケースに適用できますか?baz
つまり、署名を追加すると、単一型の制限が取り除かれ、制限がないと、右辺 [] のあいまいさが現れ、「本質的にあいまいな」タイプのforall a . Eq a => [a]
?