haskell - 为什么 >> 在 haskell 中复制右侧操作数

标签 haskell monads do-notation

我正在寻找一个字符串重复 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/

相关文章:

haskell - LYHFGG : "Monads are just applicative functors that support >>=". 这个说法在什么意义上是正确的?

Haskell——双重人格IO/ST monad?

haskell - 如何在 Haskell 中使用 IO Double 作为常规 Double

Haskell: 'do [1,2,3]; ["hello"]' 行为说明

parsing - Haskell `do` 符号如何知道当它不是由返回定义时要采用哪个值?

haskell - Haskell 如何隐藏数据构造函数?

haskell - 为什么这会给我 "is a rigid type variable bound by"错误

haskell - Haskell 中的所有图形和网络库是如何实现的?

haskell - 是否可以将 HOAS 函数转换为连续传递样式?

haskell - 什么是解析错误: naked expression at top level?