我正在寻找一个字符串重复 n
次的解决方案。我从这个 solution 中找到了 duplicate n str = [1..n] >> str
.
我想知道为什么这个方法会复制 str
。
我搜索了 >>>
,我发现了以下几点:
k >> f = k >>= \_ -> f
和
a >> b >> c >> d
-- is is equivalent to
do a
b
c
d
那我试试这个
ghci> do [1..3]; "a"
"aaa"
但我仍然不明白它是如何工作的。谁能解释这种行为?
最佳答案
列表的 >>=
的定义是 concatMap
:对列表的每个元素应用一个函数,然后连接结果。当您使用 >>>
时,这意味着应用一个函数,该函数忽略 列表中的每个元素,而是返回 > 右侧的常量值>
[1..3] >> "a" == [1..3] >>= \_ -> "a"
== concatMap (\_ -> "a") [1..3]
== "a" ++ "a" ++ "a"
== "aaa"
关于haskell - 为什么 >> 在 haskell 中复制右侧操作数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/70802489/