main = do putStrLn $ f 0; putStrLn $ f '/';
f :: Show x => x -> String
f x = show x
これは問題なく動いて
0
'/'
を出力する。
だけど
main = do putStrLn $ f 0; putStrLn $ f '/';
f :: Show x => x -> String
f 0 = "zero"
f x = show x
はコンパイルが通らない。
EqはNum同士やChar同士でないと比較できないからなんだと思うけど
どうせ型が違えば値は一致しないに決まってるんだから
「うむ、よきにはからえ」
って言って済ませたいんだけどなー。