给定一个列表[Some 1; Some 2; Some 3]
我想输出Some 6
。给定一个清单[Some 1; None]
应该产生None
。选项折叠列表
但是我发现它比我想象的要干净一些。
我能想出的最好的是这个
let someNums = [Some 1; Some 2; Some 3]
someNums
|> List.reduce (fun st v ->
Option.bind (fun x ->
Option.map (fun y -> x + y) st) v)
这是一个遍历,如果你有'sequenceA',它将是'sequenceA [Some 1;一些2;一些3] |> Option.map List.sum'查找sequenceA的代码,FsControl拥有它。 – Gustavo
@Gustavo;)你应该让这个答案 - 尽管我认为'FsControl'对于* common#F#er有点重要......'纯粹'Haskell嫉妒如果你愿意^^ – Carsten
是@Carsten,I对于这段代码,同意过于沉重,这就是我作为评论的原因。这是一种单线性解决方案,它可以被推广并进一步简化为'sequenceA [大约1;一些2;一些3] | >> sum'。 – Gustavo