用lambda表示法做部分 - 用于mapM_函数

时间:2017-01-08 12:16:39

标签: haskell

如何在do的lambda表达式中使用mapM_表示法?

mapM_ (\x -> do let x = someComputation, return ())

实际上,我正在搜索类似这个逗号的内容。

1 个答案:

答案 0 :(得分:0)

即使在lambda表达式中,也可以包含do块,正确缩进。因此,以下代码可以正常工作:

foo :: IO ()
foo = mapM_ (\x -> do let y = x * 10
                      print y
                      return ()) [1..10]

或者,您可以使用{ ... ; ... }备用语法代替@ dolet块的缩进,如@Ryan和@melpomene所述,所以这也可以正常工作:

foo = mapM_ (\x -> do { let { y = x * 10 }; print y; return () }) [1..10]

您可以使用{...}语法和缩进的以下组合来避免let周围的额外{...}

foo = mapM_ (\x -> do { let y = x * 10
                      ; print y; return () }) [1..10]

这里,分号位于y行中的let之前的列中,结束了let语句,然后分号将其与第二个语句分开。做块。有关详细信息,请参阅Section 2.7 Layout of the Haskell 98 Report,其中介绍了如何将基于缩进的布局转换为括号表示法。

相关问题