最近我看了一下 Haskell,使用LYAH。
我在搞乱类型类并编写了这个快速测试函数:
foo :: (Num x) => x -> String
foo x = show x ++ "!"
但这会产生此错误:
test.hs:2:9:
Could not deduce (Show x) arising from a use of `show'
from the context (Num x)
bound by the type signature for foo :: Num x => x -> String
at test.hs:1:8-29
Possible fix:
add (Show x) to the context of
the type signature for foo :: Num x => x -> String
但根据 LYAH 的说法:
要加入 Num,类型必须已经与 Show 和 Eq 成为朋友。
因此,如果其中的所有内容都是andNum
的子集,为什么我需要将类型签名更改为才能正常工作?难道不应该可以推断出 a也是可显示的吗?Show
Eq
foo :: (Num x, Show x) => x -> String
Num