Java中的Haskell类型类层次结构

问题描述 投票:2回答:1

我编写了一个带有类似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-> Applicative)我不见了?
  • 此层次结构中缺少哪些“有用”类型类?
java inheritance haskell hierarchy typeclass
1个回答
4
投票
  1. 你应该确保咨询typeclassopedia
  2. 爱德华·凯梅特一直在努力构建一个富有的,理智的核心类层次结构,从半群开始向前迈进。值得直接与他对应,但是看看semigroupoids以及他上传的许多相关软件包以获得一些指示:
© www.soinside.com 2019 - 2024. All rights reserved.