我在看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/

10-11 13:32