From 4722c76bd4e92bf121c33f4dbaaea64579b18e5b Mon Sep 17 00:00:00 2001 From: John Ericson Date: Wed, 17 Jul 2019 16:12:14 -0400 Subject: [PATCH 1/2] Sort langauge extensions --- src/Control/Monad/Base.hs | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/Control/Monad/Base.hs b/src/Control/Monad/Base.hs index 672bdea..1c66c2c 100644 --- a/src/Control/Monad/Base.hs +++ b/src/Control/Monad/Base.hs @@ -1,9 +1,9 @@ {-# LANGUAGE CPP #-} -{-# LANGUAGE UnicodeSyntax #-} -{-# LANGUAGE MultiParamTypeClasses #-} -{-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE FlexibleInstances #-} +{-# LANGUAGE FunctionalDependencies #-} +{-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE UndecidableInstances #-} +{-# LANGUAGE UnicodeSyntax #-} #if MIN_VERSION_base(4,4,0) {-# LANGUAGE Safe #-} From 0f239b7bc0fe2016401057d92767b7fafe5a6226 Mon Sep 17 00:00:00 2001 From: John Ericson Date: Wed, 17 Jul 2019 16:13:11 -0400 Subject: [PATCH 2/2] Define default for `liftBase` with `liftBaseDefault` I figure there are more transformers than base monads, so this is the more useful default than `id`. --- src/Control/Monad/Base.hs | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/src/Control/Monad/Base.hs b/src/Control/Monad/Base.hs index 1c66c2c..1253bb2 100644 --- a/src/Control/Monad/Base.hs +++ b/src/Control/Monad/Base.hs @@ -1,7 +1,9 @@ {-# LANGUAGE CPP #-} +{-# LANGUAGE DefaultSignatures #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE MultiParamTypeClasses #-} +{-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE UnicodeSyntax #-} @@ -55,6 +57,8 @@ class (Applicative b, Applicative m, Monad b, Monad m) ⇒ MonadBase b m | m → b where -- | Lift a computation from the base monad liftBase ∷ b α → m α + default liftBase :: (m ~ t m', MonadTrans t, MonadBase b m') => b α → m α + liftBase = liftBaseDefault #define BASE(M) \ instance MonadBase (M) (M) where liftBase = id @@ -87,7 +91,7 @@ liftBaseDefault ∷ (MonadTrans t, MonadBase b m) ⇒ b α → t m α liftBaseDefault = lift . liftBase #define TRANS(T) \ -instance (MonadBase b m) ⇒ MonadBase b (T m) where liftBase = liftBaseDefault +instance (MonadBase b m) ⇒ MonadBase b (T m) TRANS(IdentityT) TRANS(MaybeT) @@ -101,7 +105,7 @@ TRANS(SelectT r) #undef TRANS #define TRANS_CTX(CTX, T) \ -instance (CTX, MonadBase b m) ⇒ MonadBase b (T m) where liftBase = liftBaseDefault +instance (CTX, MonadBase b m) ⇒ MonadBase b (T m) TRANS_CTX(Monoid w, L.WriterT w) TRANS_CTX(Monoid w, S.WriterT w)