我在看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” 到底意味着什么吗?
最佳答案
只要\x -> f x
没有免费出现的f
,减少eta会将f
变成x
。
要检查它们是否相同,请将它们应用于某些值y
:
(\x -> f x) y === f' y -- (where f' is obtained from f by substituting all x's by y)
=== f y -- since f has no free occurrences of x
您对
haqify
的定义被视为\s -> "Haq! " ++ s
,它是\s -> (++) "Haq! " s
的语法糖。进而可以将其eta简化为(++) "Haq! "
,或者等效地,使用运算符的节标记("Haq! " ++)
。关于haskell - 在HLint中eta意味着什么,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/5793843/