我开始学习Haskell,虽然它通常很棒,但类型类系统的一些特殊性在数字化项目中引起了很多挫折.举一个具体的例子,如果我打开ghci并检查添加类型,我会得到:
Prelude> :t (+)
(+) :: Num a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)
添加是超级通用的,Num是最通用的类型等,所以一切都有意义.但是,如果我宣布了一些功能是除此之外,然后检查的类型是功能,类型类被还原成Integer!
Prelude> let add = (+)
Prelude> :t add
add :: Integer -> Integer -> Integer
Run Code Online (Sandbox Code Playgroud)
发生什么了?