如何使用 Monadex 链接 Result Monad?
How to chain Result Monads using Monadex?
背景
为了了解有关 Monadex 的更多信息,我尝试在函数中多次链接 Result Monad。
我知道这是通过 fmap 实现的,一个函数接受一个函数和一个 Monad,returns 一个 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
问题
这里的问题是,根据文档,Result Monad 没有实现 fmap
:
https://hexdocs.pm/monadex/Monad.Result.html#content
问题
- 为什么我的示例无法运行?
- 如何链接 Result Monad?
通过对源代码的简要了解,与 Functor.fmap
相比,monadex 中的 <|>
运算符似乎颠倒了它的参数。所以这有效:
(&plus_1/1) <|> (&plus_1/1) <|> success(x)
这也有效:
success(x) |> Functor.fmap(&plus_1/1) |> Functor.fmap(&plus_1/1)
不确定是设计使然还是错误 - 文档非常稀少。也许这个想法是您首先使用 <|>
构建一个计算,最后将其应用于一个值,甚至可能在代码的另一部分?
背景
为了了解有关 Monadex 的更多信息,我尝试在函数中多次链接 Result Monad。 我知道这是通过 fmap 实现的,一个函数接受一个函数和一个 Monad,returns 一个 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
问题
这里的问题是,根据文档,Result Monad 没有实现 fmap
:
https://hexdocs.pm/monadex/Monad.Result.html#content
问题
- 为什么我的示例无法运行?
- 如何链接 Result Monad?
通过对源代码的简要了解,与 Functor.fmap
相比,monadex 中的 <|>
运算符似乎颠倒了它的参数。所以这有效:
(&plus_1/1) <|> (&plus_1/1) <|> success(x)
这也有效:
success(x) |> Functor.fmap(&plus_1/1) |> Functor.fmap(&plus_1/1)
不确定是设计使然还是错误 - 文档非常稀少。也许这个想法是您首先使用 <|>
构建一个计算,最后将其应用于一个值,甚至可能在代码的另一部分?