如何映射结果&lt;&#39; a,&#39; b&gt;读者<结果<'a,'b>在f#?

时间:2018-03-08 18:46:09

标签: f# reader-monad

我有将函数映射到&#34; Reader-Result&#34;的函数,其中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>作为输入?

1 个答案:

答案 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.bindReader.map合并:

yourFunction f = Reader.map <| Result.bind f