ETA减少时可以改变一个函数的类型?(When can eta reduction change a

2019-06-23 22:55发布

究竟是怎么回事以下?

> let test = map show

> :t test
test :: [()] -> [String]

> :t (map show)
(map show) :: Show a => [a] -> [String]

我想知道我怎么以前没注意到这一点? 我居然遇到了“地图fromIntegral”,而不是表演问题 - 我的代码不与pointfree形式编译,但没有ETA减少正常工作。

有没有ETA时减少可以改变的Haskell代码的含义简单的解释?

Answer 1:

这是单态的限制 ,其适用于当一个绑定不带参数,并允许绑定到可共享时,要不然也不会因多态,从理论上说,如果你不给它一个参数要把它当作东西“恒定” -ish(因此共享)。 您可以禁用它ghci:set -XNoMonomorphismRestriction ; 这是经常有用ghci ,你经常打算这样的表达是完全多态性。 (在一个Haskell源文件,使第一线

 {-# LANGUAGE NoMonomorphismRestriction #-}

代替。)



文章来源: When can eta reduction change a function's type?