Haskell风格和类型设计(应该最小化类型类?)
假设
class A a where
m1 :: a -> a
m2 :: a -> a
m3 :: a -> a
...
可以使用m1编写m2和m3的默认实现。
把m2
和m3
留给A还是把它们写成额外的函数m2 :: A a => a -> a
外部? 或换句话说,是否值得尽量减少类API或者它有什么关系?
我(快速)检查了一些风格指南,如程序指南和大型设计问题中的一些链接以及一些书籍(工艺&rwh),但无法找到此类的建议。 如果有关于这类问题的演示文稿,博客或书籍,请您分享一些建议吗?
电子邮件列表线程类型设计讨论了这一点,并可能强调最小化。
如果他们留在班上
m2
和m3
。 如果这些方法不能被覆盖,则需要使用重写规则来进行这种优化。 一个有很多“多余”方法的标准类的例子是(在更新的版本中) Foldable
。 这部分是由于历史原因,也是因为不同的容器可能具有非常不同的严格性等属性,所以某些方法的默认实现可能对于某些实例的性能非常不利。
如果这些考虑都不适用于您的班级,请将m2
和m3
保留在班级中。 (你可以随时放置它们:如果你提供了一个默认实现,它不会破坏任何人的代码。)
上一篇: Haskell style & typeclass design (should typeclasses be minimized?)