mapM和forM可以互换吗?

dem*_*ieu 13 haskell

按照我的理解forM是一样的mapM,唯一的争论是相反的.这是否意味着如果我反驳我给他们的论点,我可以forM用a mapM和其他方式替换每一个?

dup*_*ode 20

确实.forM从字面上只是...

forM = flip mapM
Run Code Online (Sandbox Code Playgroud)

......所以除了参数的顺序之外它是一样的.作为一种风格问题,forM当函数参数是一个你没有给出名字的大块代码时看起来很好,如:

-- Somewhere in a do-block...
results <- forM items $ \item -> do
    -- A do-block using `item`.
Run Code Online (Sandbox Code Playgroud)

附注:特别是如果你使用的是最新GHC(因此4.8版本的base包)我建议更换mapM,并forM用等价的,但更普遍的traversefor分别的功能.中拉开序幕base-4.8出口traverse,而你可以找到forData.Traversable.同样,Data.Foldable提供traverse_for_,并且,严格地比mapM_forM_.


bhe*_*ilr 7

是的.定义base如下

forM  = flip mapM
Run Code Online (Sandbox Code Playgroud)

随着Haskell的等式推理,这意味着您可以替换forM使用flip mapM,然后替换flip其定义中,以一个正常的看mapM使用.您也可以向后按照此过程mapM进行操作forM.