在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 非常紧密地复制它: