如何使用 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

问题

通过对源代码的简要了解,与 Functor.fmap 相比,monadex 中的 <|> 运算符似乎颠倒了它的参数。所以这有效:

(&plus_1/1) <|> (&plus_1/1) <|> success(x)

这也有效:

success(x) |> Functor.fmap(&plus_1/1) |> Functor.fmap(&plus_1/1)

不确定是设计使然还是错误 - 文档非常稀少。也许这个想法是您首先使用 <|> 构建一个计算,最后将其应用于一个值,甚至可能在代码的另一部分?