在HLint的上下文中,eta意味着什么?
|
我正在看教程http://haskell.org/haskellwiki/How_to_write_a_Haskell_program
import System.Environment
main :: IO ()
main = getArgs >>= print . haqify . head
haqify s = \"Haq! \" ++ s
在HLint下运行该程序时,将出现以下错误;
./Haq.hs:11:1: Warning: Eta reduce
Found:
haqify s = \"Haq! \" ++ s
Why not:
haqify = (\"Haq! \" ++ )
在这种情况下,有人可以阐明“ Eta Reduce”的确切含义吗?
没有找到相关结果
已邀请:
3 个回复
物崎巩
不会自由出现
,那么eta还原会将
变成
。 要检查它们是否相同,请将它们应用于某个值
:
您对
的定义被视为
,它是
的语法糖。相应地,也可以使用运算符的节符号ѭ12将其eta缩减为
。
雄鞋谋塘
可以转换成
但是,在这种情况下,它稍微复杂些,因为rhs上有两个参数运算符
的语法糖,类型为
。但是,您可以将其转换为更标准的功能:
因为ѭ15是运算符,所以还有其他可能性:
也就是说,parens将其转换为一个单参数函数,将ѭ20应用于其参数。
乏摩纶誊伟
参见Barendregt,H.P. Lambda微积分:其语法和语义,1984年。 在Haskell上下文中,请参阅Haskell Wiki上的定义, n eta转换(也称为η转换)是在函数上添加或删除抽象。例如,以下两个值在η转换下是等效的:
和
从第一个转换为第二个将构成eta减少,而从第二个转换为第一个将是eta抽象。术语“ eta转换”可以指任一方向的过程。 大量使用η减少可导致无点编程。它通常还用于某些编译时优化。