在我寻求了解更多关于 Monadex 我试图在一个函数中多次链接一个结果单子。 我知道这是通过 fmap ,一个函数,它接受一个函数和一个单子,并返回一个单子。
defmodule TestMonadex do use Monad.Operators import Monad.Result # This wont work def p2(x) do x |> success() <|> (&plus_1/1) <|> (&plus_1/1) end defp plus_1(n), do: n + 1 end
这里的问题是,根据文档,Result Monad没有实现 fmap :
fmap
https://hexdocs.pm/monadex/Monad.Result.html#content
从一个简单的源头开始 <|> monadex中的运算符的参数似乎与 Functor.fmap .所以这是可行的:
<|>
Functor.fmap
(&plus_1/1) <|> (&plus_1/1) <|> success(x)
这也适用于:
success(x) |> Functor.fmap(&plus_1/1) |> Functor.fmap(&plus_1/1)
不确定这是出于设计还是一个bug——文档非常稀少。也许你的想法是首先用 <|> 最后将其应用于一个值,甚至可能应用于代码的另一部分?