transformers-base 0.3 → 0.4
raw patch · 4 files changed
+56/−132 lines, 4 filesdep −monad-controldep ~transformers
Dependencies removed: monad-control
Dependency ranges changed: transformers
Files
- LICENSE +1/−1
- src/Control/Monad/Base.hs +47/−36
- src/Control/Monad/Base/Control.hs +0/−88
- transformers-base.cabal +8/−7
LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2011, Mikhail Vorozhtsov+Copyright (c) 2011, Mikhail Vorozhtsov, Bas van Dijk All rights reserved. Redistribution and use in source and binary forms, with or without
src/Control/Monad/Base.hs view
@@ -1,3 +1,4 @@+{-# LANGUAGE CPP #-} {-# LANGUAGE UnicodeSyntax #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE FunctionalDependencies #-}@@ -5,12 +6,13 @@ {-# LANGUAGE UndecidableInstances #-} module Control.Monad.Base (- MonadBase(..)+ MonadBase(..),+ liftBaseDefault ) where import Data.Monoid import Data.Functor.Identity-import Control.Applicative+import Control.Applicative (Applicative) import qualified Control.Monad.ST.Lazy as L import qualified Control.Monad.ST.Strict as S import Control.Monad.Trans.Class@@ -26,42 +28,51 @@ import qualified Control.Monad.Trans.RWS.Strict as S import Control.Monad.Trans.Error import Control.Monad.Trans.Cont+import GHC.Conc.Sync (STM) -class (Applicative μ, Monad μ,- Applicative η, Monad η) ⇒ MonadBase η μ | μ → η where+class (Applicative b, Applicative m, Monad b, Monad m)+ ⇒ MonadBase b m | m → b where -- | Lift a computation from the base monad- liftBase ∷ η α → μ α+ liftBase ∷ b α → m α -instance MonadBase IO IO where liftBase = id-instance MonadBase Identity Identity where liftBase = id-instance MonadBase Maybe Maybe where liftBase = id-instance MonadBase (Either e) (Either e) where liftBase = id-instance MonadBase [] [] where liftBase = id-instance MonadBase (L.ST s) (L.ST s) where liftBase = id-instance MonadBase (S.ST s) (S.ST s) where liftBase = id+#define BASE(M) \+instance MonadBase (M) (M) where liftBase = id -instance MonadBase η μ ⇒ MonadBase η (IdentityT μ) where- liftBase = lift . liftBase-instance MonadBase η μ ⇒ MonadBase η (MaybeT μ) where- liftBase = lift . liftBase-instance MonadBase η μ ⇒ MonadBase η (ListT μ) where- liftBase = lift . liftBase-instance MonadBase η μ ⇒ MonadBase η (ReaderT r μ) where- liftBase = lift . liftBase-instance (Monoid w, MonadBase η μ) ⇒ MonadBase η (L.WriterT w μ) where- liftBase = lift . liftBase-instance (Monoid w, MonadBase η μ) ⇒ MonadBase η (S.WriterT w μ) where- liftBase = lift . liftBase-instance MonadBase η μ ⇒ MonadBase η (L.StateT s μ) where- liftBase = lift . liftBase-instance MonadBase η μ ⇒ MonadBase η (S.StateT s μ) where- liftBase = lift . liftBase-instance (Monoid w, MonadBase η μ) ⇒ MonadBase η (L.RWST r w s μ) where- liftBase = lift . liftBase-instance (Monoid w, MonadBase η μ) ⇒ MonadBase η (S.RWST r w s μ) where- liftBase = lift . liftBase-instance (Error e, MonadBase η μ) ⇒ MonadBase η (ErrorT e μ) where- liftBase = lift . liftBase-instance MonadBase η μ ⇒ MonadBase η (ContT r μ) where- liftBase = lift . liftBase+BASE(IO)+BASE(L.ST s)+BASE(S.ST s)+BASE(STM)+BASE(Maybe)+BASE(Either e)+BASE([])+BASE((→) r)+BASE(Identity)+#undef BASE +-- | Can be used as a default implementation for 'liftBase'.+--+-- Note that: @liftBaseDefault = 'lift' . 'liftBase'@+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++TRANS(IdentityT)+TRANS(MaybeT)+TRANS(ListT)+TRANS(ReaderT r)+TRANS(L.StateT s)+TRANS(S.StateT s)+TRANS(ContT r)+#undef TRANS++#define TRANS_CTX(CTX, T) \+instance (CTX, MonadBase b m) ⇒ MonadBase b (T m) where liftBase = liftBaseDefault++TRANS_CTX(Monoid w, L.WriterT w)+TRANS_CTX(Monoid w, S.WriterT w)+TRANS_CTX(Monoid w, L.RWST r w s)+TRANS_CTX(Monoid w, S.RWST r w s)+TRANS_CTX(Error e, ErrorT e)+#undef TRANS_CTX
− src/Control/Monad/Base/Control.hs
@@ -1,88 +0,0 @@-{-# LANGUAGE UnicodeSyntax #-}-{-# LANGUAGE RankNTypes #-}-{-# LANGUAGE MultiParamTypeClasses #-}-{-# LANGUAGE FunctionalDependencies #-}-{-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE UndecidableInstances #-}--module Control.Monad.Base.Control (- MonadBaseControl(..),- controlBase,- liftBaseOp,- liftBaseOp_- ) where--import Data.Monoid-import Control.Monad-import Control.Monad.Base-import Control.Monad.Trans.Identity-import Control.Monad.Trans.Maybe-import Control.Monad.Trans.Error-import Control.Monad.Trans.List-import Control.Monad.Trans.Reader-import qualified Control.Monad.Trans.Writer.Lazy as L-import qualified Control.Monad.Trans.Writer.Strict as S-import qualified Control.Monad.Trans.State.Lazy as L-import qualified Control.Monad.Trans.State.Strict as S-import qualified Control.Monad.Trans.RWS.Lazy as L-import qualified Control.Monad.Trans.RWS.Strict as S-import Control.Monad.Trans.Control--class MonadBase η μ ⇒ MonadBaseControl η μ | μ → η where- -- | Helper for lifting control operations from the base monad.- liftBaseControl ∷ (RunInBase μ η → η α) → μ α--instance MonadBaseControl IO IO where- liftBaseControl = idLiftControl--instance MonadBaseControl η μ ⇒ MonadBaseControl η (IdentityT μ) where- liftBaseControl = liftLiftControlBase liftBaseControl--instance MonadBaseControl η μ ⇒ MonadBaseControl η (MaybeT μ) where- liftBaseControl = liftLiftControlBase liftBaseControl--instance (Error e, MonadBaseControl η μ)- ⇒ MonadBaseControl η (ErrorT e μ) where- liftBaseControl = liftLiftControlBase liftBaseControl--instance MonadBaseControl η μ ⇒ MonadBaseControl η (ListT μ) where- liftBaseControl = liftLiftControlBase liftBaseControl--instance MonadBaseControl η μ ⇒ MonadBaseControl η (ReaderT r μ) where- liftBaseControl = liftLiftControlBase liftBaseControl--instance (Monoid w, MonadBaseControl η μ)- ⇒ MonadBaseControl η (L.WriterT w μ) where- liftBaseControl = liftLiftControlBase liftBaseControl--instance (Monoid w, MonadBaseControl η μ)- ⇒ MonadBaseControl η (S.WriterT w μ) where- liftBaseControl = liftLiftControlBase liftBaseControl--instance MonadBaseControl η μ ⇒ MonadBaseControl η (L.StateT s μ) where- liftBaseControl = liftLiftControlBase liftBaseControl--instance MonadBaseControl η μ ⇒ MonadBaseControl η (S.StateT s μ) where- liftBaseControl = liftLiftControlBase liftBaseControl--instance (Monoid w, MonadBaseControl η μ)- ⇒ MonadBaseControl η (L.RWST r w s μ) where- liftBaseControl = liftLiftControlBase liftBaseControl--instance (Monoid w, MonadBaseControl η μ)- ⇒ MonadBaseControl η (S.RWST r w s μ) where- liftBaseControl = liftLiftControlBase liftBaseControl--controlBase ∷ MonadBaseControl η μ ⇒ (RunInBase μ η → η (μ α)) → μ α-controlBase = join . liftBaseControl--liftBaseOp ∷ MonadBaseControl η μ- ⇒ ((α → η (μ β)) → η (μ γ))- → (α → μ β ) → μ γ-liftBaseOp base m = controlBase $ \runInBase → base $ runInBase . m--liftBaseOp_ ∷ MonadBaseControl η μ- ⇒ (η (μ β) → η (μ γ))- → μ β → μ γ-liftBaseOp_ base m = controlBase $ \runInBase → base $ runInBase m-
transformers-base.cabal view
@@ -1,5 +1,5 @@ Name: transformers-base-Version: 0.3+Version: 0.4 Category: Control Stability: experimental Synopsis: Lift computations from the bottom of a transformer stack@@ -10,9 +10,13 @@ Homepage: https://github.com/mvv/transformers-base Bug-Reports: https://github.com/mvv/transformers-base/issues -Author: Mikhail Vorozhtsov <mikhail.vorozhtsov@gmail.com>+Author:+ Mikhail Vorozhtsov <mikhail.vorozhtsov@gmail.com>,+ Bas van Dijk <v.dijk.bas@gmail.com> Maintainer: Mikhail Vorozhtsov <mikhail.vorozhtsov@gmail.com>-Copyright: 2011 Mikhail Vorozhtsov <mikhail.vorozhtsov@gmail.com>+Copyright:+ 2011 Mikhail Vorozhtsov <mikhail.vorozhtsov@gmail.com>,+ Bas van Dijk <v.dijk.bas@gmail.com> License: BSD3 License-File: LICENSE @@ -26,11 +30,8 @@ Library Build-Depends: base >= 4.4 && < 5,- transformers >= 0.2,- monad-control >= 0.2.0.2+ transformers >= 0.2 Hs-Source-Dirs: src GHC-Options: -Wall Exposed-Modules: Control.Monad.Base- Control.Monad.Base.Control-