<div dir="ltr">I agree that the AMonoid type you describe is useful. In fact, it's going to be in base when GHC 8.6 is released: <a href="https://github.com/ghc/ghc/pull/123">https://github.com/ghc/ghc/pull/123</a></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, May 2, 2018 at 10:31 AM, 박신환 <span dir="ltr"><<a href="mailto:ndospark320@naver.com" target="_blank">ndospark320@naver.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div><div style="font-size:10pt;font-family:NanumGothic,나눔고딕,sans-serif"><p>Logical XOR is associative, also is XNOR. And they both have an identity element.</p><p> </p><p>Hence:</p><p> </p><p>newtype Even = Even {getEven :: Bool} </p><p>newtype Odd = Odd {getOdd :: Bool}</p><p> </p><p>instance Semigroup Even where</p><p>    (<>) = (==) -- (==) over Bool == Logical XNOR </p><p> </p><p>instance Semigroup Odd where</p><p>    (<>) = (/=) -- (/=) over Bool == Logical XOR </p><p> </p><p>instance Monoid Even where</p><p>    mempty = True</p><p> </p><p>instance Monoid Odd where</p><p>    mempty = False</p><p> </p><p>So foldMap would determine the parity of the number of Trues. </p><p> </p><p> </p><p>Also, Monoid lifted by Applicative is also Monoid. This might be useful:</p><p> </p><p>newtype AMonoid f a = AMonoid {getAMonoid :: f a}</p><p> </p><p>instance (Applicative f, Semigroup a) => Semigroup (AMonoid f a) where</p><p>    (<>) = liftA2 (<>)</p><p> </p><p>instance (Applicative f, Monoid a) => Monoid (AMonoid f a) where</p><p>    mempty = pure mempty</p><p> </p></div></div><table style="display:none"><tbody><tr><td><img src="https://mail.naver.com/readReceipt/notify/?img=JlRCbHFTpz%2FYaqgZKrRZFAMrFzU%2FFAt9azU%2FKoCSFoCSa6U9pxvZp430a6UqtzFXp6UmaLl5WLl51zlqDBFdp6d5MreRhoRn16iZMBiGpBFg1zJq1rknWVlTb4b%3D.gif" border="0"></td></tr></tbody></table><br>______________________________<wbr>_________________<br>
Libraries mailing list<br>
<a href="mailto:Libraries@haskell.org">Libraries@haskell.org</a><br>
<a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/libraries" rel="noreferrer" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/libraries</a><br>
<br></blockquote></div><br><br clear="all"><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">-Andrew Thaddeus Martin</div>
</div>