在Haskell中展平列表和单个元素的混合物

f#

在 F# 中,我可以使用yield/yield!语法将单个元素和数组的混合组合成一个集合,例如

let result = seq {
    yield 1
    yield! [2;3;4;5]
    yield! [6;7]
    yield 8
}

printfn "%A" result
// Prints: seq [1; 2; 3; 4; ...]

我想知道在 Haskell 中是否有类似的方法。

回答

相当于:

result = concat [
     [1],
     [2,3,4,5],
     [6,7],
     [8]
  ]
result = concat [
     [1],
     [2,3,4,5],
     [6,7],
     [8]
  ]

你的评论:

它会起作用,但我需要先将我的单个元素转换为列表。

有点没抓住重点。您的 F# 版本已经将单个元素转换为列表。这就是yield它的作用。

但是如果你真的对语法很着迷,你可以用 writer monad 非常紧密地复制它:


以上是在Haskell中展平列表和单个元素的混合物的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>