Haskell mapM和表单是否可以互换?
据我所知,Haskell mapM和表单是否可以互换?,haskell,Haskell,据我所知,forM与mapM相同,只有参数是相反的。 这是否意味着我可以用mapM替换每个表单,反之亦然,如果我颠倒了我给出的参数。base中的定义如下 forM = flip mapM 根据Haskell的等式推理,这意味着您可以用flip mapM替换forM,然后用其定义替换flip,以获得外观正常的mapM用法。你也可以按照这个过程向后走,从mapM到forM表单只是 。。。所以,除了参数的顺序,它是相同的。就风格而言,forM在函数参数是一大块代码时看起来不错,您不必费心给它命名,
forM
与mapM
相同,只有参数是相反的。
这是否意味着我可以用mapM
替换每个表单
,反之亦然,如果我颠倒了我给出的参数。base
中的定义如下
forM = flip mapM
根据Haskell的等式推理,这意味着您可以用
flip mapM
替换forM
,然后用其定义替换flip
,以获得外观正常的mapM
用法。你也可以按照这个过程向后走,从mapM
到forM
<代码>表单只是
。。。所以,除了参数的顺序,它是相同的。就风格而言,forM
在函数参数是一大块代码时看起来不错,您不必费心给它命名,如:
-- Somewhere in a do-block...
results <- forM items $ \item -> do
-- A do-block using `item`.
--do块中的某个位置。。。
结果如何
--使用'item'的do块。
旁注:特别是如果您使用最新的GHC(以及4.8版的base
软件包),我建议将mapM
和forM
分别替换为等效但更通用的遍历
和函数。base-4.8
中的前奏部分导出了遍历
,而您可以在数据.Traversable中找到for
。类似地,Data.Foldable
提供了遍历
和for
,这比mapM
和表单
更为通用
-- Somewhere in a do-block...
results <- forM items $ \item -> do
-- A do-block using `item`.