究竟是怎么回事以下?
> let test = map show
> :t test
test :: [()] -> [String]
> :t (map show)
(map show) :: Show a => [a] -> [String]
我想知道我怎么以前没注意到这一点? 我居然遇到了“地图fromIntegral”,而不是表演问题 - 我的代码不与pointfree形式编译,但没有ETA减少正常工作。
有没有ETA时减少可以改变的Haskell代码的含义简单的解释?
究竟是怎么回事以下?
> let test = map show
> :t test
test :: [()] -> [String]
> :t (map show)
(map show) :: Show a => [a] -> [String]
我想知道我怎么以前没注意到这一点? 我居然遇到了“地图fromIntegral”,而不是表演问题 - 我的代码不与pointfree形式编译,但没有ETA减少正常工作。
有没有ETA时减少可以改变的Haskell代码的含义简单的解释?
这是单态的限制 ,其适用于当一个绑定不带参数,并允许绑定到可共享时,要不然也不会因多态,从理论上说,如果你不给它一个参数要把它当作东西“恒定” -ish(因此共享)。 您可以禁用它ghci
有:set -XNoMonomorphismRestriction
; 这是经常有用ghci
,你经常打算这样的表达是完全多态性。 (在一个Haskell源文件,使第一线
{-# LANGUAGE NoMonomorphismRestriction #-}
代替。)