Haskell默认的超类实例

时间:2011-05-03 02:53:21

标签: haskell typeclass boilerplate

我想从一些自定义类的Num声明中取出一些样板(称为Monomial和Polynomial)。而不是写

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

处理这个问题的通常/简单方法是什么?

1 个答案:

答案 0 :(得分:2)

处理此问题的常用方法是至少执行以下一项或多项操作:

  1. 抱怨很多。

  2. 编写这样的辅助函数:

  3.    
    simpleMinus f g = f + (negate g)
    
    1. 使用Template HaskellDerive等工具。

    2. 尝试实施您提到的扩展程序。 (遗憾的是,这并不像你想象的那么容易。)