如何在do
的lambda表达式中使用mapM_
表示法?
mapM_ (\x -> do let x = someComputation, return ())
实际上,我正在搜索类似这个逗号的内容。
答案 0 :(得分:0)
即使在lambda表达式中,也可以包含do
块,正确缩进。因此,以下代码可以正常工作:
foo :: IO ()
foo = mapM_ (\x -> do let y = x * 10
print y
return ()) [1..10]
或者,您可以使用{ ... ; ... }
备用语法代替@ do
和let
块的缩进,如@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,其中介绍了如何将基于缩进的布局转换为括号表示法。