On Tue, Mar 21, 2017 at 3:53 AM, Louis Pan <louis@pan.me> wrote:--Hi all,In my Glazier GUI library, I had to use newtype wrappers to create Semigroup and Monoid instances for ReaderT.Is there a reason why ReaderT doesn't have an instance of Semigroup and Monoid?There are at least three reasonable instances of Semigroup and Monoid for ReaderT.instance (Applicative m, Monoid a) => Monoid (ReaderT r m a) wheremempty = pure memptymappend a b = mappend <$> a <*> binstance (Alternative m) => Monoid (ReaderT r m a) wheremempty = emptymappend = (<|>)instance (Monoid (m a)) => Monoid (ReaderT r m a) wheremempty = ReaderT $ memptymappend a b = ReaderT $ mappend a bIn the absence of a principled reason to prefer one over the others and a general consensus, I think it’s better not to choose.
_______________________________________________
Haskell-Cafe mailing list
To (un)subscribe, modify options or view archives go to:
http://mail.haskell.org/cgi-bin/mailman/listinfo/haskell- cafe
Only members subscribed via the mailman list are allowed to post.