2

我知道 monad 通常不想解开底层价值,因为它可能存在也可能不存在。在我的用例中,我想使用函数式编程技术,将 ramda 用于函数库,将 Crocks 用于代数数据结构库,以在功能不完整的代码库中编写代码。我通常会使用 Either、IO 和 Maybe monad 来编写我的代码,然后从结果 monad 中提取最终结果,这样我就可以将值返回给尚未接受 monad 的函数。

Folktale 有一个叫做getOrElse返回值或未定义/错误字符串的东西。这非常有用,允许我在不期望处理 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();
}
4

1 回答 1

2

在这里查看示例,https://crocks.dev/docs/crocks/Result.html#eitherhttps://crocks.dev/docs/crocks/Maybe.html#either我认为这是最接近你的重新尝试做。

您本质上要触及的是折叠价值。在这种情况下,您需要确保可以接受 a并Maybe a传入两个函数,它们是不想返回 a 的函数的返回值在哪里() -> ba -> bbMonad

于 2020-10-07T23:02:31.913 回答