我有将函数映射到" Reader-Result"的函数,其中f是'a->'b:
('a->'b) -> Reader<Result<'a,'c>> -> Reader<Result<'b,'c>>
let map f = Reader.map <| Result.map f
但是如何编写一个类似的地图,将函数'a->Result<'b,'c>
作为输入?
答案 0 :(得分:2)
与map
类似,但其参数返回Result<_,_>
的函数称为bind
。它的签名是:
bind : ('a -> Result<'b, 'c>) -> Result<'a, 'c> -> Result<'b, 'c>
我假设你想要的签名是:
yourFunction : ('a -> Result<'b, 'c>) -> Reader<Result<'a, 'c>> -> Reader<Result<'b, 'c>>
要获得此类功能,请将Result.bind
与Reader.map
合并:
yourFunction f = Reader.map <| Result.bind f