Haskell无点编译类型

Nim*_*m1 5 haskell

所以我对Haskell来说真的很新,但我正在玩点免费符号,并遇到了这个问题.我在控制台:

> let c = (.)negate 
> :t c 
> (a -> Integer) -> a -> Integer -> a
Run Code Online (Sandbox Code Playgroud)

但是否定取一个数字,为​​什么它被约束为一个整数类型?

bhe*_*ilr 7

这是GHCi中扩展违约规则的另一个案例.做:set -XNoMonomorphismRestriction或做

> :set +m  -- multiline input in GHCi
> let c :: (Num a) => (b -> a) -> b -> a -> b
|     c = (.) negate
|
> :t c
Num a => (b -> a) -> b -> a -> b
Run Code Online (Sandbox Code Playgroud)

  • 只需注意,您不需要多行输入; 你可以写`let x :: T; x = t`. (2认同)