Мне нравится использовать ROP, когда мне приходится иметь дело со строками ввода-вывода / синтаксического анализа /...
Однако, скажем, у меня есть функция, принимающая 2 параметра.Как вы можете сделать чистое / читаемое частичное приложение, если ваши 2 параметра уже являются Результатом <'a,' b> (не обязательно то же самое, что и 'a,' b)?
Пока что я делаю, что яиспользуйте tuple для передачи параметров и используйте функцию ниже, чтобы получить Result of the tuple, чтобы я мог затем связать свою функцию с этим «tuple-параметром».
/// 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