【发布时间】:2011-05-03 02:53:21
【问题描述】:
我想为一些自定义类(称为单项式和多项式)从 Num 声明中提取一些样板。而不是写
instance Num (Monomial) where
f - g = f + (negate g)
abs _ = undefined
有没有办法解决这个问题?我遇到了default superclass instances 和一个叫做“the strathclyde haskell enhancement”的东西,如果实现它可能会让我写出类似的东西,
class SimpleNum a => Num a where
(+) :: a -> a -> a -- standard ring stuff
(*) :: a -> a -> a
one :: a
zero :: a
instance Num (SimpleNum a) where
f - g = f + (negate g)
abs _ = undefined
通常/简单的处理方法是什么?
【问题讨论】:
-
也许这部分是 Num 的设计不是很好的问题,即它应该是 AbelianGroup => Ring => Num ...
-
这是其中的一部分,但是就更具体的类型的成员而言,我们不能为不太具体的类型类的方法设置默认值,所以这真的太糟糕了:-(。虽然至少那时我们的代码不必有所有这些无缘无故的底部......
-
SHE 已实现。不知道是不是这个功能,但是SHE是一个真正可以使用的预处理器。
-
您知道数字前奏曲haskell.org/haskellwiki/Numeric_Prelude 吗?它至少提供了一个更合理的 Num。
-
@John L:非常感谢,很有帮助!!
标签: haskell typeclass boilerplate