Haskell 中没有参数的匿名函数

Anonymous function without parameter in Haskell

我可以在 Haskell 中定义一个不带参数的匿名函数吗?

我有一段代码在几个分支中重复出现。这些代码引用了外部的几个值。

目的 0:定义一个函数来完成代码块中的工作。

目的 1:不要重复 codeBlock 两次。

目的 2:不要将 d1..d4 传递给函数。更好地避免传递文件和时间。

f event d1 d2 d3 d4 =
  case event of
    (Modified file time) -> do
       codeBlock file time d1 d2 d3 d4 
    (Added file time) -> do
       codeBlock file time d1 d2 d3 d44
    _ -> return ()

不存在不带参数(匿名或其他)的函数。那只是一个 value(在 Haskell 中,actions 就像 main :: IO () 也只是值)。

当然,值可以在任何地方定义(比如函数);但是,如果您想在多个地方重复使用它,您应该 而不是 使其匿名,但给它一个(局部范围的)名称:

f event d1 d2 d3 d4 =
  case event of
    (Modified file time) -> do
       defaultAction time
    (Added file time) -> do
       defaultAction time
    _ -> return ()
 where defaultAction time = do
           codeBlock file time d1 d2 d3 d4

顺便说一句,只有一个语句的 doequivalent 只是那个语句,即你也可以写

f event d1 d2 d3 d4 =
  case event of
    (Modified file time) -> defaultAction time
    (Added file time) -> defaultAction time
    _ -> return ()
 where defaultAction time = codeBlock file time d1 d2 d3 d4