Haskell默认超类实例
我想为一些自定义类(称它们为单项式和多项式)从Num声明中提取一些样板文件。而不是写作Haskell默认超类实例,haskell,typeclass,boilerplate,Haskell,Typeclass,Boilerplate,我想为一些自定义类(称它们为单项式和多项式)从Num声明中提取一些样板文件。而不是写作 instance Num (Monomial) where f - g = f + (negate g) abs _ = undefined 有没有办法绕过这个问题?我遇到了一个名为“”的东西,如果实现它,我可能会写这样的东西 class SimpleNum a => Num a where (+) :: a -> a -> a -- standard ring s
instance Num (Monomial) where
f - g = f + (negate g)
abs _ = undefined
有没有办法绕过这个问题?我遇到了一个名为“”的东西,如果实现它,我可能会写这样的东西
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…这是它的一部分,但是我们不能在更具体的类型类的成员方面为不太具体的类型类的方法设置默认值,所以这也太糟糕了:-(.虽然至少我们的代码不需要所有这些免费的底部…她已经实现了。我不知道这个功能是否实现了,但她是一个真正的预处理器,你可以使用。你知道数字的前奏吗?它至少提供了一个更合理的数字。@John L:非常感谢,这非常有帮助!!谢谢,我可能只是这次写它是因为我只有几个函数,但很高兴了解模板Haskell和派生。 simpleMinus f g = f + (negate g)