Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
14 changes: 9 additions & 5 deletions src/Control/Monad/Base.hs
Original file line number Diff line number Diff line change
@@ -1,9 +1,11 @@
{-# LANGUAGE CPP #-}
{-# LANGUAGE UnicodeSyntax #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE DefaultSignatures #-}
{-# LANGUAGE FlexibleInstances #-}
{-# LANGUAGE FunctionalDependencies #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies #-}
{-# LANGUAGE UndecidableInstances #-}
{-# LANGUAGE UnicodeSyntax #-}

#if MIN_VERSION_base(4,4,0)
{-# LANGUAGE Safe #-}
Expand Down Expand Up @@ -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
Expand Down Expand Up @@ -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)
Expand All @@ -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)
Expand Down