packages feed

transformers-base 0.1 → 0.2

raw patch · 2 files changed

+93/−3 lines, 2 filesdep +monad-control

Dependencies added: monad-control

Files

+ src/Control/Monad/Base/Control.hs view
@@ -0,0 +1,88 @@+{-# 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.1+Version: 0.2 Category: Control Stability: experimental Synopsis: Lift computations from the bottom of a transformer stack@@ -25,10 +25,12 @@  Library   Build-Depends:-    base         >= 4.4 && < 5,-    transformers >= 0.2+    base          >= 4.4 && < 5,+    transformers  >= 0.2,+    monad-control >= 0.2.0.2   Hs-Source-Dirs: src   GHC-Options: -Wall   Exposed-Modules:     Control.Monad.Base+    Control.Monad.Base.Control