3

いくつかのカスタムクラス(単項式および多項式と呼びます)のNum宣言からボイラープレートの一部を削除したいと思います。書く代わりに

instance Num (Monomial) where
    f - g = f + (negate g)
    abs _ = undefined

これを回避する方法はありますか?私はデフォルトのスーパークラスインスタンスと「 strathclydehaskellenhancement」と呼ばれるものに出くわしました。これを実装すると、次のようなものを書くことができます。

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

これに対処する通常の/簡単な方法は何ですか?

4

1 に答える 1

2

これに対処する通常の方法は、次の少なくとも1つ以上を実行することです。

  1. たくさんつぶやく。

  2. 次のようなヘルパー関数を記述します。

simpleMinus fg = f +(gを否定)
  1. TemplateHaskellDeriveなどのツールを使用します。

  2. あなたが言及したような拡張機能を実装してみてください。(残念ながら、これは思ったほど簡単ではありません。)

于 2011-05-03T04:14:11.320 に答える