Haskell中没有参数的匿名函数

时间:2015-10-19 05:36:51

标签: haskell anonymous-function

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

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

目的0:定义一个函数在codeBlock中完成工作。

目的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 ()

1 个答案:

答案 0 :(得分:4)

没有参数(匿名或其他)的功能。这只是(在Haskell中,操作,如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
只有一个语句的BTW,do块只有equivalent只是那个语句,即你也可以写

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