Canonicalise Monad instances again (fixes #45)
authorRoss Paterson <ross@soi.city.ac.uk>
Sat, 2 Sep 2017 10:25:47 +0000 (10:25 +0000)
committerRoss Paterson <ross@soi.city.ac.uk>
Sat, 2 Sep 2017 10:25:47 +0000 (10:25 +0000)
From Herbert Valerio Riedel

This fixes a minor regression causing validation errors in GHC HEAD

Control/Monad/Trans/Reader.hs
Control/Monad/Trans/State/Lazy.hs
Control/Monad/Trans/State/Strict.hs
Data/Functor/Reverse.hs

index c160a31..b577b2d 100644 (file)
@@ -167,7 +167,11 @@ instance (Monad m) => Monad (ReaderT r m) where
         a <- runReaderT m r
         runReaderT (k a) r
     {-# INLINE (>>=) #-}
+#if MIN_VERSION_base(4,8,0)
+    (>>) = (*>)
+#else
     m >> k = ReaderT $ \ r -> runReaderT m r >> runReaderT k r
+#endif
     {-# INLINE (>>) #-}
     fail msg = lift (fail msg)
     {-# INLINE fail #-}
index ceaa8bc..13f61f4 100644 (file)
@@ -206,7 +206,8 @@ instance (Functor m, Monad m) => Applicative (StateT s m) where
         ~(x, s'') <- mx s'
         return (f x, s'')
     {-# INLINE (<*>) #-}
-    (*>) = (>>)
+    m *> k = m >>= \_ -> k
+    {-# INLINE (*>) #-}
 
 instance (Functor m, MonadPlus m) => Alternative (StateT s m) where
     empty = StateT $ \ _ -> mzero
index 763f544..f1fb782 100644 (file)
@@ -203,7 +203,8 @@ instance (Functor m, Monad m) => Applicative (StateT s m) where
         (x, s'') <- mx s'
         return (f x, s'')
     {-# INLINE (<*>) #-}
-    (*>) = (>>)
+    m *> k = m >>= \_ -> k
+    {-# INLINE (*>) #-}
 
 instance (Functor m, MonadPlus m) => Alternative (StateT s m) where
     empty = StateT $ \ _ -> mzero
index 7ff9f89..a6abc46 100644 (file)
@@ -85,8 +85,10 @@ instance (Alternative f) => Alternative (Reverse f) where
 
 -- | Derived instance.
 instance (Monad m) => Monad (Reverse m) where
+#if !(MIN_VERSION_base(4,8,0))
     return a = Reverse (return a)
     {-# INLINE return #-}
+#endif
     m >>= f = Reverse (getReverse m >>= getReverse . f)
     {-# INLINE (>>=) #-}
     fail msg = Reverse (fail msg)