能否在effect-ts中使用自定义Monad?兼论与fp-ts的选择
关于在Effect-TS中接入自定义Monad的疑问
我一直在TypeScript中从零定义Monad,始终遗憾TypeScript缺少高阶类型(HKTs),无法定义适用于所有Monad的通用函数,比如通用的map或类似Haskell的do表示法。
原本计划深入研究fp-ts,却发现它正与effect-ts合并,而effect-ts看起来是个不错的工具包,且采用了更优的方式编码HKTs。在我看来,Effect是多个Monad的组合体,我想知道是否有办法将自定义Monad接入其中:
- 比如希望使用array monad,将数字数组转换为
Effect<number, ...>,并在调用Effect.flatMap时实现数组展开。
如果理解正确,只要能将Effect用作continuation monad,就能模拟所有其他Monad,但Effect中似乎没有内置continuation monad的实现。我对Effect.runCallback了解不多,但它的回调仅会在求值完成时被调用一次,而真正的continuation需要支持多次触发回调。
因此我想确认:
- 是否我遗漏了Effect中某些支持continuation或自定义Monad接入的特性?
- 或者我是否应该转回使用fp-ts——毕竟我的核心需求是自定义Monad的使用,而非Effect提供的大量工具函数?
内容的提问来源于stack exchange,提问作者Juan
相关产品推荐
相关产品推荐

