【发布时间】:2011-05-26 20:47:57
【问题描述】:
我编写了一个library,其Java 接口类似于Haskell 类型类,以及实现所有“可派生”方法的抽象类(例如Monad.join 可以使用>>= 和return 编写)。这是我计划的结构([] 表示接口尚不存在):
Applicative <= Alternative <-,
Functor <= Pointed <= Applicative <= Monad <= MondPlus
Functor <= Copointed <= Comonad Monad <= [MonadFix]
Category <= Arrow <= ArrowChoice
Arrow <= [ArrowApply]
Arrow <= [ArrowLoop]
Arrow <= [ArrowZero] <= [ArrowPlus]
Bifunctor
- 这种层次结构“正确”吗?
- 特别是,MonadPlus 实现 Alternative 是否正确?
- 我应该从 MonadPlus 中拆分 MonadZero 吗? ArrowZero 和 ArrowPlus 的问题相同
- 当一个类实现多个“端点”(例如,Maybe 是 MonadPlus 和 MonadFix,Kleisli 是 ArrowEverything)时,如何减少代码重复
- Arrow 理论上也可以扩展 Applicative。目前我在 Arrow 上有一个返回 Applicative 的方法,因为看起来类型curring 使得这里的继承变得不可能。
- 我还缺少其他不明显的“连接”(例如 Arrow->Applicative)吗?
- 此层次结构中缺少哪些“有用的”类型类?
【问题讨论】:
标签: java inheritance haskell hierarchy typeclass