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 ように普通の関数として提供しておいてインスタンス定義のときに使ってね、というパターンもあります