<div dir="ltr"><div><div>Ah, good point. I didn't think that there would be other instances. I'll close the darcs request.</div></div><div class="m_-7050800221657045880gmail_msg"><br></div><div><br><div class="gmail_quote"><div>On Thu, 23 Mar 2017 at 6:58 am, David Menendez <<a href="mailto:dave@zednenem.com" target="_blank">dave@zednenem.com</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_-7050800221657045880gmail_msg">On Tue, Mar 21, 2017 at 3:53 AM, Louis Pan <span class="m_-7050800221657045880gmail_msg"><<a href="mailto:louis@pan.me" class="m_-7050800221657045880gmail_msg" target="_blank">louis@pan.me</a>></span> wrote:<br class="m_-7050800221657045880gmail_msg"><div class="gmail_quote m_-7050800221657045880gmail_msg"><div class="m_-7050800221657045880gmail_msg"><div class="gmail_extra m_-7050800221657045880gmail_msg"><div class="gmail_quote m_-7050800221657045880gmail_msg"><span class="m_-7050800221657045880gmail_msg"><blockquote class="gmail_quote m_-7050800221657045880gmail_msg" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="m_-7050800221657045880gmail_msg"><div style="font-size:12.8px" class="m_-7050800221657045880gmail_msg">Hi all,</div><div style="font-size:12.8px" class="m_-7050800221657045880gmail_msg"><br class="m_-7050800221657045880gmail_msg"></div><div style="font-size:12.8px" class="m_-7050800221657045880gmail_msg">In my Glazier GUI library, I had to use newtype wrappers to create Semigroup and Monoid instances for ReaderT.</div><div style="font-size:12.8px" class="m_-7050800221657045880gmail_msg"><br class="m_-7050800221657045880gmail_msg"></div><div style="font-size:12.8px" class="m_-7050800221657045880gmail_msg">Is there a reason why ReaderT doesn't have an instance of Semigroup and Monoid?</div></div></blockquote><div class="m_-7050800221657045880gmail_msg"><br class="m_-7050800221657045880gmail_msg"></div></span><div class="m_-7050800221657045880gmail_msg">There are at least three reasonable instances of Semigroup and Monoid for ReaderT.</div><span class="m_-7050800221657045880gmail_msg"><div class="m_-7050800221657045880gmail_msg"><br class="m_-7050800221657045880gmail_msg"></div><div class="m_-7050800221657045880gmail_msg">instance (Applicative m, Monoid a) => Monoid (ReaderT r m a) where</div><div class="m_-7050800221657045880gmail_msg">    mempty = pure mempty</div></span><div class="m_-7050800221657045880gmail_msg">    mappend a b = mappend <$> a <*> b</div><div class="m_-7050800221657045880gmail_msg"><br class="m_-7050800221657045880gmail_msg"></div><div class="m_-7050800221657045880gmail_msg">instance (Alternative m) => Monoid (ReaderT r m a) where</div><div class="m_-7050800221657045880gmail_msg">    mempty = empty</div><div class="m_-7050800221657045880gmail_msg">    mappend = (<|>)</div><div class="m_-7050800221657045880gmail_msg"><br class="m_-7050800221657045880gmail_msg"></div><div class="m_-7050800221657045880gmail_msg">instance (Monoid (m a)) => Monoid (ReaderT r m a) where</div><div class="m_-7050800221657045880gmail_msg">    mempty = ReaderT $ mempty</div><div class="m_-7050800221657045880gmail_msg">    mappend a b = ReaderT $ mappend a b</div></div><div class="m_-7050800221657045880gmail_msg"><br class="m_-7050800221657045880gmail_msg"></div><div class="m_-7050800221657045880gmail_msg"><br class="m_-7050800221657045880gmail_msg"></div><div class="m_-7050800221657045880gmail_msg">In the absence of a principled reason to prefer one over the others and a general consensus, I think it’s better not to choose.</div><span class="m_-7050800221657045880m_-2012150010769036108HOEnZb m_-7050800221657045880gmail_msg"><font color="#888888" class="m_-7050800221657045880gmail_msg"><div class="m_-7050800221657045880gmail_msg"><br class="m_-7050800221657045880gmail_msg"></div></font></span></div></div></div>-- <br class="m_-7050800221657045880gmail_msg"><div class="m_-7050800221657045880m_-2012150010769036108gmail_signature m_-7050800221657045880gmail_msg" data-smartmail="gmail_signature">Dave Menendez <<a href="mailto:dave@zednenem.com" class="m_-7050800221657045880gmail_msg" target="_blank">dave@zednenem.com</a>><br class="m_-7050800221657045880gmail_msg"><<a href="http://www.eyrie.org/~zednenem/" class="m_-7050800221657045880gmail_msg" target="_blank">http://www.eyrie.org/~<wbr>zednenem/</a>></div><br><br></div><br><br>______________________________<wbr>_________________<br class="m_-7050800221657045880gmail_msg"><br>Haskell-Cafe mailing list<br class="m_-7050800221657045880gmail_msg"><br>To (un)subscribe, modify options or view archives go to:<br class="m_-7050800221657045880gmail_msg"><br><a href="http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell-cafe" rel="noreferrer" class="m_-7050800221657045880gmail_msg" target="_blank">http://mail.haskell.org/cgi-<wbr>bin/mailman/listinfo/haskell-<wbr>cafe</a><br class="m_-7050800221657045880gmail_msg"><br>Only members subscribed via the mailman list are allowed to post.</blockquote></div></div></div>