Dual型
hsnewtype Dual a = Dual { getDual :: a }
「
双対を表すもの」、とか、「入れ替えができる」と説明される
よくわかっていない

Monoid (Dual a)
は
Monoid a
の双対、
Functor (Dual f)
は
Functor f
の双対、みたいな解釈で良いんだろうか
#??
instances
hsinstance Semigroup a => Semigroup (Dual a) where
Dual a <> Dual b = Dual (b <> a)
逆転して連結している

hsinstance Monoid a => Monoid (Dual a) where
mempty = Dual mempty
etc.
割といっぱいある
