Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/elixir/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Functional programming 如何使用Monadex链接结果monad? 背景_Functional Programming_Elixir_Monads - Fatal编程技术网

Functional programming 如何使用Monadex链接结果monad? 背景

Functional 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) <|> (&

为了了解更多信息,我尝试在一个函数中多次链接一个结果单子。 我知道这是通过函数实现的,函数接受一个函数和一个Monad并返回一个Monad

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

通过对源代码的简要分析,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——文档非常稀少。也许你的想法是首先用
构建一个计算,然后最后将它应用到一个值,甚至可能在代码的另一部分?

从源代码的简单分析,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——文档非常稀少。也许您的想法是首先使用
构建一个计算,然后将其应用于一个值,甚至可能应用于代码的另一部分