Java中的Haskell类型类层次结构

时间:2011-05-26 20:47:57

标签: java inheritance haskell hierarchy typeclass

我用类似Haskell类型类的Java接口编写library,实现所有“可派生”方法的抽象类(例如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-&gt; Applicative)我错过了?
  • 此层次结构中缺少哪些“有用”类型类?

1 个答案:

答案 0 :(得分:4)

  1. 您应该参考typeclassopedia

  2. 爱德华·凯梅特一直在努力构建一个丰富,理智的核心类层次结构,从半群开始向前迈进。值得直接与他对应,但是看看semigroupoids和他上传的许多相关软件包以获得一些指示: