gpt4 book ai didi

haskell ->>= 和 concatMap 的区别

转载 作者:行者123 更新时间:2023-12-01 07:09:25 24 4
gpt4 key购买 nike

我在玩>>=今天,试图了解monads,发现了一个有趣的模式。使用列表单子(monad)时,>>=似乎表现得像 concatMap。我四处搜寻,试图找到任何相似之处,特别是在 hackage 的定义中。

我尝试过的一些事情:
[1, 2, 3] >>= (iter 5 id) => [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3]

concatMap (iter 5 id) [1, 2, 3]=> [1,1,1,1,1,2,2,2,2,2,3,3,3,3,3]
[1, 2, 3] >>= (iter 5 (+5)) => [1,6,11,16,21,2,7,12,17,22,3,8,13,18,23] concatMap (iter 5 (+5) ) [1, 2, 3] => [1,6,11,16,21,2,7,12,17,22,3,8,13,18,23] iter只是非无限迭代,
iter i f a = toL $ Data.Sequence.iterateN i f a
where
toL = Data.Foldable.toList :: Data.Sequence.Seq a -> [a]

(在 repl.it 中工作,所以进口被搞砸了)。

(>>=)相当于 concatMap列表?
concatMap的概括吗? ?

最佳答案

是的,论据颠倒了。比较这些类型签名应该会发现相似性,尽管特殊的列表语法会干扰:

Prelude> :t flip concatMap
flip concatMap :: Foldable t => t a -> (a -> [b]) -> [b]
Prelude> :t (>>=)
(>>=) :: Monad m => m a -> (a -> m b) -> m b

关于haskell ->>= 和 concatMap 的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43378005/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com