如何从 Crocks javascript 库中的 Monad 中提取值

How to extract the value out of Monads in the Crocks javascript library

我知道 monad 通常不想解开底层值,因为它可能存在也可能不存在。在我的用例中,我想使用函数式编程技术,将 ramda 用于函数库,将 Crocks 用于代数数据结构库,以便在功能不全的代码库中编写代码。我通常会使用 Either、IO 和 Maybe monads 来编写我的代码,然后从生成的 monad 中提取最终结果,这样我就可以 return 一个函数的值,而不是接受还没有单子。

Folktale 有一个叫做 getOrElse 的东西,它将 return 一个值或一个 undefined/error 字符串。这非常有用,让我可以在不希望处理 monad 的环境中进行功能性编写。 Crocks 是否有类似的东西,或者是否有另一种方法来打开 Either、IO 或 Maybe?

我想在 Crocks 中复制的民间故事示例:

const simpleFunction = (a) => {
    myMaybe = Maybe.of(a);

    // some random transformations on myMaybe

    // this will fall back to the second case if the maybe is empty
    return myMaybe.getOrElse() || doSomethingElseOnError();
}

查看此处的示例,https://crocks.dev/docs/crocks/Result.html#either or https://crocks.dev/docs/crocks/Maybe.html#either我认为它最接近您要执行的操作。

您真正要触及的是折出值。在这种情况下,您需要确保可以采用 Maybe a 并传入 () -> ba -> b 两个函数,其中 b 是 return 的值你的函数不想 return a Monad