mapM和forM可以互换吗?

时间:2015-08-31 16:25:54

标签: haskell

据我所知,forMmapM相同,只有参数相反。 这是否意味着我可以用forM替换每个mapM,反之亦然,如果我颠倒我给他们的论点?

2 个答案:

答案 0 :(得分:18)

事实上。 forM只是literally ...

forM = flip mapM

...除了参数的顺序之外它是相同的。作为一种风格问题,forM看起来不错,因为函数参数是一个很大的代码块,你没有给出一个名字,如:

-- Somewhere in a do-block...
results <- forM items $ \item -> do
    -- A do-block using `item`.

附注:特别是如果您使用的是最新的GHC(以及base软件包的4.8版本),我建议将mapMforM替换为等效但更通用的traverse分别为{1}}和for个函数。 base-4.8中的前奏导出traverse,而您可以在for中找到Data.Traversable。同样,Data.Foldable提供traverse_for_,它们比mapM_forM_更为通用。

答案 1 :(得分:6)

Yesbase中的定义为

forM  = flip mapM

使用Haskell的等式推理,这意味着您可以将forM替换为flip mapM,然后将flip替换为其定义,以获得正常的mapM用法。您也可以向后关注此过程,从mapM转到forM

相关问题