Monomorphism restriction
参考:Wiki
(1) xor :: Bool -> Bool -> Bool xor = (/=) (2) xor x y = (/=) x y もしくは xor x = (/=) x
人間的には(2は型指定したつもりになればw)両方とも同じなんだけど、(1)の方は明示的に型を指定してあげないとコンパイルエラーとなる。polymorphicにしたかったら関数の型にも寄るけど
neq :: (Eq a) => a -> a -> Bool neq = (/=)
こういう感じにしてあげれば良いらしい。
不便だとは思うけど、まだそういう事を偉そうにほざけるほどHaskell使えてないから一年後くらいに自分の意見が言えたらと思う。とりあえず今のところは、このコンパイルエラーが出たらちゃんと型を指定してあげるか、(2)みたいな書き方してやれば良いということにしておく。
ちなみにGHCの場合は-fno-monomorphism-restrictionオプションでこういうのを許可することも出来る模様。