【问题标题】:Haskell type class hierarchy in JavaJava中的Haskell类型类层次结构
【发布时间】: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


    【解决方案1】:
    1. 请务必咨询typeclassopedia

    2. Edward Kmett 一直在做 yeoman 的工作,试图构建一个丰富、健全的核心类层次结构,从半群开始并向前发展。值得直接和他对应,不过看看semigroupoids和他上传的很多相关包给点参考吧:

    【讨论】:

    • 我当然知道“原始”类型百科,但链接看起来很有希望。
    猜你喜欢
    • 2020-03-28
    • 1970-01-01
    • 2011-03-25
    • 1970-01-01
    • 2020-08-30
    • 2015-06-28
    • 1970-01-01
    • 1970-01-01
    • 2011-10-03
    相关资源
    最近更新 更多