【发布时间】:2019-03-20 00:50:16
【问题描述】:
当我必须处理 IO/解析字符串/...时,我喜欢使用 ROP...
但是,假设我有一个带有 2 个参数的函数。当您的 2 个参数已经是 Result (不需要相同的 'a, 'b)时,如何进行干净/可读的部分应用程序?
现在,我所做的是使用元组传递参数并使用下面的函数来获取元组的结果,这样我就可以将我的函数与这个“元组参数”绑定。
/// Transform a tuple of Result in a Result of tuple
let tupleAllResult x =
match (fst x, snd x) with
| Result.Ok a, Result.Ok b -> (a,b) |> Result.Ok
| Result.Ok a, Result.Error b -> b |> Result.Error
| Result.Error a, _ -> a |> Result.Error
let f (a: 'T, b: 'U) = // something
(A, B) |> tupleAllResult
|> (Result.bind f)
有什么好主意吗?
这是我写的,可行但可能不是最优雅的
let resultFunc (f: Result<('a -> Result<'b, 'c>), 'd>) a =
match f with
| Result.Ok g -> (g a) |> Result.Ok |> Result.flatten
| Result.Error e -> e |> Result.Error |> Result.flatten
【问题讨论】:
标签: f#