kir*_*del 4 haskell type-conversion
我开始学习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)
发生什么了?
你已经遇到了可怕的单态限制.您可以禁用它并获取通用功能.
Prelude> let x = (+)
Prelude> :t x
x :: Integer -> Integer -> Integer
Prelude> :set -XNoMonomorphismRestriction
Prelude> let y = (+)
Prelude> :t y
y :: Num a => a -> a -> a
Run Code Online (Sandbox Code Playgroud)
这里的概念是单形态限制将使类型限制为单个(单个)混凝土块.您可以使用NoMonomorphismRestriction扩展程序禁用它.