復習 Semigroup 結合則 (a・b)・c = a・(b・c) class Semigroup a where (<>) :: a -> a -> a Monoid 結合則 (a・b)・c = a・(b・c) 単位元 e・a = a・e = a class Semigroup a => Monoid a where mempty :: a mappend :: a -> a -> a mappend = (<>) 本題 Haskellerの中には、「設定はMonoidであるべき」宗派が存在する。そのような信念を持つHaskellerが作ったライブラリを使おうとすると、Monoid のインスタンスを (<>) でつないで設定データを構築することになる。 この記事では、SemigroupをMonoidに昇格させるのはいつかという話題を扱うので、まずSemigroupである設定データから始