SemiGroup,Monoidが定義されている状態でGroupを自分で定義してMonoidのインスタンスにしたいのですが<>はSemigroup,memptyはMonoidで定義されている時にインスタンス宣言を一つで済ませる方法はないのでしょうか?
Group
型クラスなどは自分で定義したものだそうなので、 Group
型クラスを :point_down: のように書き換えてみると、重複が少なくて済むのではないでしょうか:class Monoid a => Group a where inv :: a -> a
Field
型クラスのメソッドとして unit
から invpro
まですべて定義しないとできませんね... どうしても一箇所にまとめたいのであれば例えば定義用のmoduleを分けるとして、module BoolMethods where unit :: Bool unit = False plus :: Bool -> Bool -> Bool plus = (||) ... invpro :: Bool -> Bool invpro = const True
BoolMethods
というモジュールを定義してから、module BoolInstances where import qualified BoolMethods as B instance Group Bool where unit = B.unit ...
fmapDefault
や foldMapDefault
ように普通の関数として提供しておいてインスタンス定義のときに使ってね、というパターンもあります