Functional programming 如何使用Monadex链接结果monad? 背景
为了了解更多信息,我尝试在一个函数中多次链接一个结果单子。 我知道这是通过函数实现的,函数接受一个函数和一个Monad并返回一个MonadFunctional programming 如何使用Monadex链接结果monad? 背景,functional-programming,elixir,monads,Functional Programming,Elixir,Monads,为了了解更多信息,我尝试在一个函数中多次链接一个结果单子。 我知道这是通过函数实现的,函数接受一个函数和一个Monad并返回一个Monad defmodule TestMonadex do use Monad.Operators import Monad.Result # This wont work def p2(x) do x |> success() <|> (&plus_1/1) <|> (&
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
defmodule TestMonadex do
使用单子运算符
导入Monad.Result
#这行不通
DEFP2(x)do
x
|>成功()
(&plus_1/1)
(&plus_1/1)
结束
除雾器加_1(n),do:n+1
结束
问题
这里的问题是,根据文档,Result Monad没有实现fmap
:
问题:
- 为什么我的例子不起作用
- 如何将结果链接到Monad
操作符的参数似乎与Functor.fmap
相反。所以这是可行的:
(&plus\u 1/1)(&plus\u 1/1)成功(x)
这也适用于:
success(x)|>Functor.fmap(&plus_1/1)|>Functor.fmap(&plus_1/1)
不确定这是设计的还是一个bug——文档非常稀少。也许你的想法是首先用
构建一个计算,然后最后将它应用到一个值,甚至可能在代码的另一部分?从源代码的简单分析,monadex中的
操作符的参数似乎与Functor.fmap
相反。所以这是可行的:
(&plus\u 1/1)(&plus\u 1/1)成功(x)
这也适用于:
success(x)|>Functor.fmap(&plus_1/1)|>Functor.fmap(&plus_1/1)
不确定这是设计的还是一个bug——文档非常稀少。也许您的想法是首先使用
构建一个计算,然后将其应用于一个值,甚至可能应用于代码的另一部分