Haskell风格和类型设计(应该最小化类型类?)

假设

class A a where
   m1 :: a -> a 
   m2 :: a -> a
   m3 :: a -> a
   ...

可以使用m1编写m2和m3的默认实现。

m2m3留给A还是把它们写成额外的函数m2 :: A a => a -> a外部? 或换句话说,是否值得尽量减少类API或者它有什么关系?

我(快速)检查了一些风格指南,如程序指南和大型设计问题中的一些链接以及一些书籍(工艺&rwh),但无法找到此类的建议。 如果有关于这类问题的演示文稿,博客或书籍,请您分享一些建议吗?

电子邮件列表线程类型设计讨论了这一点,并可能强调最小化。


如果他们留在班上

  • 对于该类,有多个不同的最小完整定义集,并且不能事先告诉哪个对于给定实例更简单/优雅。
  • 可以合理预期的是,特定类型(例如,未装箱的向量)将允许比默认类型更有效地实现m2m3 。 如果这些方法不能被覆盖,则需要使用重写规则来进行这种优化。
  • 一个有很多“多余”方法的标准类的例子是(在更新的版本中) Foldable 。 这部分是由于历史原因,也是因为不同的容器可能具有非常不同的严格性等属性,所以某些方法的默认实现可能对于某些实例的性能非常不利。

    如果这些考虑都不适用于您的班级,请将m2m3保留在班级中。 (你可以随时放置它们:如果你提供了一个默认实现,它不会破坏任何人的代码。)

    链接地址: http://www.djcxy.com/p/42879.html

    上一篇: Haskell style & typeclass design (should typeclasses be minimized?)

    下一篇: Managing invariants in Clojure / Haskell