変換が空要素としてのアイデンティティ関数とバイナリ操作としての標準関数の構成で、変換がモノノイドを形成しなければならないかのように見えます。私はそれが特に有用だとは思わないが、可能でなければならない。線に沿って何か:変換のセットf :: a-> aは単項式の上に関数の構成を形成します - これをMonoidのインスタンスにするにはどうしたらいいですか?
Illegal instance declaration for ‘Monoid (a -> a)’
(All instance types must be of the form (T a1 ... an)
where a1 ... an are *distinct type variables*,
and each type variable appears at most once in the instance head.
Use FlexibleInstances if you want to disable this.)
In the instance declaration for ‘Monoid (a -> a)’
私は」:上記
instance Monoid (a -> a) where
mempty = id
mappend f g = (.)
は
instance Monoid b => Monoid (a -> b) where
mempty _ = mempty
mappend f g x = f x `mappend` g x
エラーがあり、それが既存の定義によってマスクされている可能性があるため、コンパイルされません。私はまだHaskellのスクラブだから、どうすればこの問題を解決できるのか分かりません。
二重引用符の回答の脚注として、「Endo」をうまく使用する例の1つは、[foldMap'の中の 'foldr'のためのデフォルト実装を取得しています(http://stackoverflow.com/q/23319683/2751851)。 – duplode