我知道 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();
}