packages feed

transformers-abort 0.5.0.1 → 0.6

raw patch · 4 files changed

+181/−53 lines, 4 filesdep −data-default-classdep ~basedep ~monad-controldep ~pointedPVP ok

version bump matches the API change (PVP)

Dependencies removed: data-default-class

Dependency ranges changed: base, monad-control, pointed, semigroupoids, transformers, transformers-base

API changes (from Hackage documentation)

- Control.Monad.Trans.Abort: instance (Functor μ, Monad μ) => Alt (AbortT e μ)
- Control.Monad.Trans.Abort: instance (Functor μ, Monad μ) => Applicative (AbortT e μ)
- Control.Monad.Trans.Abort: instance (Functor μ, Monad μ) => Apply (AbortT e μ)
- Control.Monad.Trans.Abort: instance (Functor μ, Monad μ) => Bind (AbortT e μ)
- Control.Monad.Trans.Abort: instance (Functor μ, Monad μ, Default e) => Alternative (AbortT e μ)
- Control.Monad.Trans.Abort: instance (Functor μ, Monad μ, Default e) => Plus (AbortT e μ)
- Control.Monad.Trans.Abort: instance (Monad μ, Default e) => MonadPlus (AbortT e μ)
- Control.Monad.Trans.Abort: instance BindTrans (AbortT e)
- Control.Monad.Trans.Abort: instance Functor μ => Functor (AbortT e μ)
- Control.Monad.Trans.Abort: instance Monad μ => Monad (AbortT e μ)
- Control.Monad.Trans.Abort: instance Monad μ => Pointed (AbortT e μ)
- Control.Monad.Trans.Abort: instance MonadBase η μ => MonadBase η (AbortT e μ)
- Control.Monad.Trans.Abort: instance MonadBaseControl η μ => MonadBaseControl η (AbortT e μ)
- Control.Monad.Trans.Abort: instance MonadFix μ => MonadFix (AbortT e μ)
- Control.Monad.Trans.Abort: instance MonadIO μ => MonadIO (AbortT e μ)
- Control.Monad.Trans.Abort: instance MonadTrans (AbortT e)
- Control.Monad.Trans.Abort: instance MonadTransControl (AbortT e)
- Control.Monad.Trans.Abort: runAbortT :: AbortT e μ α -> μ (Either e α)
- Control.Monad.Trans.Finish: instance (Functor μ, Monad μ) => Applicative (FinishT f μ)
- Control.Monad.Trans.Finish: instance (Functor μ, Monad μ) => Apply (FinishT f μ)
- Control.Monad.Trans.Finish: instance (Functor μ, Monad μ) => Bind (FinishT f μ)
- Control.Monad.Trans.Finish: instance BindTrans (FinishT f)
- Control.Monad.Trans.Finish: instance Functor μ => Functor (FinishT f μ)
- Control.Monad.Trans.Finish: instance Monad μ => Monad (FinishT f μ)
- Control.Monad.Trans.Finish: instance Monad μ => Pointed (FinishT f μ)
- Control.Monad.Trans.Finish: instance MonadBase η μ => MonadBase η (FinishT f μ)
- Control.Monad.Trans.Finish: instance MonadBaseControl η μ => MonadBaseControl η (FinishT e μ)
- Control.Monad.Trans.Finish: instance MonadFix μ => MonadFix (FinishT f μ)
- Control.Monad.Trans.Finish: instance MonadIO μ => MonadIO (FinishT f μ)
- Control.Monad.Trans.Finish: instance MonadTrans (FinishT f)
- Control.Monad.Trans.Finish: instance MonadTransControl (FinishT f)
- Control.Monad.Trans.Finish: runFinishT :: FinishT f μ α -> μ (Either f α)
+ Control.Monad.Trans.Abort: [runAbortT] :: AbortT e μ α -> μ (Either e α)
+ Control.Monad.Trans.Abort: instance (GHC.Base.Functor μ, GHC.Base.Monad μ) => Data.Functor.Bind.Class.Apply (Control.Monad.Trans.Abort.AbortT e μ)
+ Control.Monad.Trans.Abort: instance (GHC.Base.Functor μ, GHC.Base.Monad μ) => Data.Functor.Bind.Class.Bind (Control.Monad.Trans.Abort.AbortT e μ)
+ Control.Monad.Trans.Abort: instance (GHC.Base.Functor μ, GHC.Base.Monad μ) => GHC.Base.Applicative (Control.Monad.Trans.Abort.AbortT e μ)
+ Control.Monad.Trans.Abort: instance (GHC.Classes.Eq f, Data.Functor.Classes.Eq1 μ) => Data.Functor.Classes.Eq1 (Control.Monad.Trans.Abort.AbortT f μ)
+ Control.Monad.Trans.Abort: instance (GHC.Classes.Eq f, Data.Functor.Classes.Eq1 μ, GHC.Classes.Eq α) => GHC.Classes.Eq (Control.Monad.Trans.Abort.AbortT f μ α)
+ Control.Monad.Trans.Abort: instance (GHC.Classes.Ord f, Data.Functor.Classes.Ord1 μ) => Data.Functor.Classes.Ord1 (Control.Monad.Trans.Abort.AbortT f μ)
+ Control.Monad.Trans.Abort: instance (GHC.Classes.Ord f, Data.Functor.Classes.Ord1 μ, GHC.Classes.Ord α) => GHC.Classes.Ord (Control.Monad.Trans.Abort.AbortT f μ α)
+ Control.Monad.Trans.Abort: instance (GHC.Read.Read f, Data.Functor.Classes.Read1 μ) => Data.Functor.Classes.Read1 (Control.Monad.Trans.Abort.AbortT f μ)
+ Control.Monad.Trans.Abort: instance (GHC.Read.Read f, Data.Functor.Classes.Read1 μ, GHC.Read.Read α) => GHC.Read.Read (Control.Monad.Trans.Abort.AbortT f μ α)
+ Control.Monad.Trans.Abort: instance (GHC.Show.Show f, Data.Functor.Classes.Show1 μ) => Data.Functor.Classes.Show1 (Control.Monad.Trans.Abort.AbortT f μ)
+ Control.Monad.Trans.Abort: instance (GHC.Show.Show f, Data.Functor.Classes.Show1 μ, GHC.Show.Show α) => GHC.Show.Show (Control.Monad.Trans.Abort.AbortT f μ α)
+ Control.Monad.Trans.Abort: instance Control.Monad.Base.MonadBase η μ => Control.Monad.Base.MonadBase η (Control.Monad.Trans.Abort.AbortT e μ)
+ Control.Monad.Trans.Abort: instance Control.Monad.Fail.MonadFail μ => Control.Monad.Fail.MonadFail (Control.Monad.Trans.Abort.AbortT f μ)
+ Control.Monad.Trans.Abort: instance Control.Monad.Fix.MonadFix μ => Control.Monad.Fix.MonadFix (Control.Monad.Trans.Abort.AbortT e μ)
+ Control.Monad.Trans.Abort: instance Control.Monad.IO.Class.MonadIO μ => Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.Abort.AbortT e μ)
+ Control.Monad.Trans.Abort: instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.Abort.AbortT e)
+ Control.Monad.Trans.Abort: instance Control.Monad.Trans.Control.MonadBaseControl η μ => Control.Monad.Trans.Control.MonadBaseControl η (Control.Monad.Trans.Abort.AbortT e μ)
+ Control.Monad.Trans.Abort: instance Control.Monad.Trans.Control.MonadTransControl (Control.Monad.Trans.Abort.AbortT e)
+ Control.Monad.Trans.Abort: instance Control.Monad.Zip.MonadZip μ => Control.Monad.Zip.MonadZip (Control.Monad.Trans.Abort.AbortT f μ)
+ Control.Monad.Trans.Abort: instance Data.Foldable.Foldable μ => Data.Foldable.Foldable (Control.Monad.Trans.Abort.AbortT e μ)
+ Control.Monad.Trans.Abort: instance Data.Functor.Bind.Trans.BindTrans (Control.Monad.Trans.Abort.AbortT e)
+ Control.Monad.Trans.Abort: instance Data.Pointed.Pointed μ => Data.Pointed.Pointed (Control.Monad.Trans.Abort.AbortT e μ)
+ Control.Monad.Trans.Abort: instance Data.Traversable.Traversable μ => Data.Traversable.Traversable (Control.Monad.Trans.Abort.AbortT e μ)
+ Control.Monad.Trans.Abort: instance GHC.Base.Functor μ => GHC.Base.Functor (Control.Monad.Trans.Abort.AbortT e μ)
+ Control.Monad.Trans.Abort: instance GHC.Base.Monad μ => GHC.Base.Monad (Control.Monad.Trans.Abort.AbortT e μ)
+ Control.Monad.Trans.Finish: [runFinishT] :: FinishT f μ α -> μ (Either f α)
+ Control.Monad.Trans.Finish: instance (GHC.Base.Functor μ, GHC.Base.Monad μ) => Data.Functor.Bind.Class.Apply (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance (GHC.Base.Functor μ, GHC.Base.Monad μ) => Data.Functor.Bind.Class.Bind (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance (GHC.Base.Functor μ, GHC.Base.Monad μ) => GHC.Base.Applicative (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance (GHC.Classes.Eq f, Data.Functor.Classes.Eq1 μ) => Data.Functor.Classes.Eq1 (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance (GHC.Classes.Eq f, Data.Functor.Classes.Eq1 μ, GHC.Classes.Eq α) => GHC.Classes.Eq (Control.Monad.Trans.Finish.FinishT f μ α)
+ Control.Monad.Trans.Finish: instance (GHC.Classes.Ord f, Data.Functor.Classes.Ord1 μ) => Data.Functor.Classes.Ord1 (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance (GHC.Classes.Ord f, Data.Functor.Classes.Ord1 μ, GHC.Classes.Ord α) => GHC.Classes.Ord (Control.Monad.Trans.Finish.FinishT f μ α)
+ Control.Monad.Trans.Finish: instance (GHC.Read.Read f, Data.Functor.Classes.Read1 μ) => Data.Functor.Classes.Read1 (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance (GHC.Read.Read f, Data.Functor.Classes.Read1 μ, GHC.Read.Read α) => GHC.Read.Read (Control.Monad.Trans.Finish.FinishT f μ α)
+ Control.Monad.Trans.Finish: instance (GHC.Show.Show f, Data.Functor.Classes.Show1 μ) => Data.Functor.Classes.Show1 (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance (GHC.Show.Show f, Data.Functor.Classes.Show1 μ, GHC.Show.Show α) => GHC.Show.Show (Control.Monad.Trans.Finish.FinishT f μ α)
+ Control.Monad.Trans.Finish: instance Control.Monad.Base.MonadBase η μ => Control.Monad.Base.MonadBase η (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance Control.Monad.Fail.MonadFail μ => Control.Monad.Fail.MonadFail (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance Control.Monad.Fix.MonadFix μ => Control.Monad.Fix.MonadFix (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance Control.Monad.IO.Class.MonadIO μ => Control.Monad.IO.Class.MonadIO (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance Control.Monad.Trans.Class.MonadTrans (Control.Monad.Trans.Finish.FinishT f)
+ Control.Monad.Trans.Finish: instance Control.Monad.Trans.Control.MonadBaseControl η μ => Control.Monad.Trans.Control.MonadBaseControl η (Control.Monad.Trans.Finish.FinishT e μ)
+ Control.Monad.Trans.Finish: instance Control.Monad.Trans.Control.MonadTransControl (Control.Monad.Trans.Finish.FinishT f)
+ Control.Monad.Trans.Finish: instance Control.Monad.Zip.MonadZip μ => Control.Monad.Zip.MonadZip (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance Data.Functor.Bind.Trans.BindTrans (Control.Monad.Trans.Finish.FinishT f)
+ Control.Monad.Trans.Finish: instance Data.Pointed.Pointed μ => Data.Pointed.Pointed (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance GHC.Base.Functor μ => GHC.Base.Functor (Control.Monad.Trans.Finish.FinishT f μ)
+ Control.Monad.Trans.Finish: instance GHC.Base.Monad μ => GHC.Base.Monad (Control.Monad.Trans.Finish.FinishT f μ)

Files

LICENSE view
@@ -1,4 +1,4 @@-Copyright (c) 2011, Mikhail Vorozhtsov+Copyright (c) 2011-2016, Mikhail Vorozhtsov All rights reserved.  Redistribution and use in source and binary forms, with or without 
src/Control/Monad/Trans/Abort.hs view
@@ -5,51 +5,95 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE UndecidableInstances #-} +-- | Error monad transformer. module Control.Monad.Trans.Abort-  ( Abort-  , runAbort-  , AbortT(..)+  ( AbortT(..)   , abort   , recover+  , Abort+  , runAbort   ) where  import Data.Pointed import Data.Functor.Identity-import Data.Functor.Alt-import Data.Functor.Plus import Data.Functor.Bind import Data.Functor.Bind.Trans-import Data.Default.Class-import Control.Applicative-import Control.Monad (ap, MonadPlus(..))+#if MIN_VERSION_base(4,9,0) || MIN_VERSION_transformers(0,5,0)+import Data.Functor.Classes+#endif+#if !MIN_VERSION_base(4,9,0)+import Control.Applicative (Applicative(..))+#endif+import Control.Applicative (liftA2)+import Control.Monad (ap) #if !MIN_VERSION_monad_control(1,0,0) import Control.Monad (liftM) #endif+#if MIN_VERSION_base(4,9,0)+import qualified Control.Monad.Fail as Fail+#endif import Control.Monad.Base import Control.Monad.Fix+#if MIN_VERSION_base(4,4,0)+import Control.Monad.Zip (MonadZip(..))+#endif import Control.Monad.Trans.Class import Control.Monad.Trans.Control import Control.Monad.IO.Class +-- | A monad transformer that extends monad @μ@ with the ability+--   to raise errors of type @e@ and to recover from them. newtype AbortT e μ α = AbortT { runAbortT ∷ μ (Either e α) } -type Abort e α = AbortT e Identity α+#if MIN_VERSION_base(4,9,0) || MIN_VERSION_transformers(0,5,0)+instance (Eq f, Eq1 μ) ⇒ Eq1 (AbortT f μ) where+  liftEq f m₁ m₂ = liftEq (liftEq f) (runAbortT m₁) (runAbortT m₂) -runAbort ∷ Abort e α → Either e α-runAbort = runIdentity . runAbortT+instance (Ord f, Ord1 μ) ⇒ Ord1 (AbortT f μ) where+  liftCompare f m₁ m₂ =+    liftCompare (liftCompare f) (runAbortT m₁) (runAbortT m₂) -instance Monad μ ⇒ Pointed (AbortT e μ) where-  point = AbortT . return . Right+instance (Show f, Show1 μ) ⇒ Show1 (AbortT f μ) where+  liftShowsPrec sp sl d =+      showsUnaryWith (liftShowsPrec sp' sl') "AbortT" d . runAbortT+    where+      sp' = liftShowsPrec sp sl+      sl' = liftShowList sp sl -instance Functor μ ⇒ Functor (AbortT e μ) where-  fmap f = AbortT . fmap (fmap f) . runAbortT+instance (Read f, Read1 μ) ⇒ Read1 (AbortT f μ) where+  liftReadsPrec rp rl =+      readsData $ readsUnaryWith (liftReadsPrec rp' rl') "AbortT" AbortT+    where+      rp' = liftReadsPrec rp rl+      rl' = liftReadList rp rl -instance (Functor μ, Monad μ) ⇒ Alt (AbortT e μ) where-  m <!> m' = recover m (const m')+instance (Eq f, Eq1 μ, Eq α) ⇒ Eq (AbortT f μ α) where+  (==) = eq1 -instance (Functor μ, Monad μ, Default e) ⇒ Plus (AbortT e μ) where-  zero = mzero+instance (Ord f, Ord1 μ, Ord α) ⇒ Ord (AbortT f μ α) where+  compare = compare1 +instance (Show f, Show1 μ, Show α) ⇒ Show (AbortT f μ α) where+  showsPrec = showsPrec1++instance (Read f, Read1 μ, Read α) ⇒ Read (AbortT f μ α) where+  readsPrec = readsPrec1+#endif++instance Foldable μ ⇒ Foldable (AbortT e μ) where+  foldMap f = foldMap (either (const mempty) f) . runAbortT++instance Traversable μ ⇒ Traversable (AbortT e μ) where+  traverse f = fmap AbortT+             . traverse (either (pure . Left) (fmap Right . f))+             . runAbortT++instance Pointed μ ⇒ Pointed (AbortT e μ) where+  point = AbortT . point . Right++instance Functor μ ⇒ Functor (AbortT e μ) where+  fmap f = AbortT . fmap (fmap f) . runAbortT+ instance (Functor μ, Monad μ) ⇒ Apply (AbortT e μ) where   (<.>) = ap @@ -57,10 +101,6 @@   pure  = return   (<*>) = ap -instance (Functor μ, Monad μ, Default e) ⇒ Alternative (AbortT e μ) where-  empty = zero-  (<|>) = (<!>)- instance (Functor μ, Monad μ) ⇒ Bind (AbortT e μ) where   (>>-) = (>>=) @@ -69,14 +109,21 @@   m >>= f = AbortT $ runAbortT m >>= either (return . Left) (runAbortT . f)   fail    = AbortT . fail -instance (Monad μ, Default e) ⇒ MonadPlus (AbortT e μ) where-  mzero = abort def-  m `mplus` m' = recover m (const m')+#if MIN_VERSION_base(4,9,0)+instance Fail.MonadFail μ ⇒ Fail.MonadFail (AbortT f μ) where+  fail = AbortT . Fail.fail+#endif  instance MonadFix μ ⇒ MonadFix (AbortT e μ) where   mfix f = AbortT $ mfix $     runAbortT . f . either (error "mfix(AbortT): Left") id +#if MIN_VERSION_base(4,4,0)+instance MonadZip μ ⇒ MonadZip (AbortT f μ) where+  mzipWith f m₁ m₂ =+    AbortT $ mzipWith (liftA2 f) (runAbortT m₁) (runAbortT m₂)+#endif+ instance MonadIO μ ⇒ MonadIO (AbortT e μ) where   liftIO = lift . liftIO @@ -112,8 +159,17 @@   restoreM     = defaultRestoreM unStMAbort #endif +-- | Raise an error. abort ∷ Monad μ ⇒ e → AbortT e μ α abort = AbortT . return . Left +-- | Recover from an error. recover ∷ Monad μ ⇒ AbortT e μ α → (e → AbortT e μ α) → AbortT e μ α recover m h = AbortT $ runAbortT m >>= either (runAbortT . h) (return . Right)++-- | An alias for 'AbortT' over 'Identity'.+type Abort e α = AbortT e Identity α++-- | 'runAbortT' specialized for 'Abort'.+runAbort ∷ Abort e α → Either e α+runAbort = runIdentity . runAbortT
src/Control/Monad/Trans/Finish.hs view
@@ -5,40 +5,92 @@ {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE UndecidableInstances #-} +-- | Short-circuit monad transformer. module Control.Monad.Trans.Finish-  ( Finish-  , runFinish-  , runFinish'-  , FinishT(..)+  ( FinishT(..)   , runFinishT'   , finish+  , Finish+  , runFinish+  , runFinish'   ) where  import Data.Pointed import Data.Functor.Identity import Data.Functor.Bind import Data.Functor.Bind.Trans-import Control.Applicative+#if MIN_VERSION_base(4,9,0) || MIN_VERSION_transformers(0,5,0)+import Data.Functor.Classes+#endif+#if !MIN_VERSION_base(4,9,0)+import Control.Applicative (Applicative(..))+#endif+import Control.Applicative (liftA2) import Control.Monad (ap) #if !MIN_VERSION_monad_control(1,0,0) import Control.Monad (liftM) #endif+#if MIN_VERSION_base(4,9,0)+import qualified Control.Monad.Fail as Fail+#endif import Control.Monad.Base import Control.Monad.Fix+#if MIN_VERSION_base(4,4,0)+import Control.Monad.Zip (MonadZip(..))+#endif import Control.Monad.Trans.Class import Control.Monad.Trans.Control import Control.Monad.IO.Class +-- | A monad transformer that extends monad @μ@ with the ability+--   to short-circuit computations with a value of type @f@.+--+-- @+--   'runFinishT' $ do someStuff+--                   'Control.Monad.when' condition $ 'finish' reason+--                   otherwiseContinue+-- @+-- newtype FinishT f μ α = FinishT { runFinishT ∷ μ (Either f α) } -type Finish f α = FinishT f Identity α+#if MIN_VERSION_base(4,9,0) || MIN_VERSION_transformers(0,5,0)+instance (Eq f, Eq1 μ) ⇒ Eq1 (FinishT f μ) where+  liftEq f m₁ m₂ = liftEq (liftEq f) (runFinishT m₁) (runFinishT m₂) -runFinish ∷ Finish f α → Either f α-runFinish = runIdentity . runFinishT+instance (Ord f, Ord1 μ) ⇒ Ord1 (FinishT f μ) where+  liftCompare f m₁ m₂ =+    liftCompare (liftCompare f) (runFinishT m₁) (runFinishT m₂) -instance Monad μ ⇒ Pointed (FinishT f μ) where-  point = FinishT . return . Right+instance (Show f, Show1 μ) ⇒ Show1 (FinishT f μ) where+  liftShowsPrec sp sl d =+      showsUnaryWith (liftShowsPrec sp' sl') "FinishT" d . runFinishT+    where+      sp' = liftShowsPrec sp sl+      sl' = liftShowList sp sl +instance (Read f, Read1 μ) ⇒ Read1 (FinishT f μ) where+  liftReadsPrec rp rl =+      readsData $ readsUnaryWith (liftReadsPrec rp' rl') "FinishT" FinishT+    where+      rp' = liftReadsPrec rp rl+      rl' = liftReadList rp rl++instance (Eq f, Eq1 μ, Eq α) ⇒ Eq (FinishT f μ α) where+  (==) = eq1++instance (Ord f, Ord1 μ, Ord α) ⇒ Ord (FinishT f μ α) where+  compare = compare1++instance (Show f, Show1 μ, Show α) ⇒ Show (FinishT f μ α) where+  showsPrec = showsPrec1++instance (Read f, Read1 μ, Read α) ⇒ Read (FinishT f μ α) where+  readsPrec = readsPrec1+#endif++instance Pointed μ ⇒ Pointed (FinishT f μ) where+  point = FinishT . point . Right+ instance Functor μ ⇒ Functor (FinishT f μ) where   fmap f = FinishT . fmap (fmap f) . runFinishT @@ -57,10 +109,21 @@   m >>= f = FinishT $ runFinishT m >>= either (return . Left) (runFinishT . f)   fail    = FinishT . fail +#if MIN_VERSION_base(4,9,0)+instance Fail.MonadFail μ ⇒ Fail.MonadFail (FinishT f μ) where+  fail = FinishT . Fail.fail+#endif+ instance MonadFix μ ⇒ MonadFix (FinishT f μ) where   mfix f = FinishT $ mfix $-    runFinishT . f . either (error "mfix(FinishT): Left") id+    runFinishT . f . either (const $ error "mfix(FinishT): Left") id +#if MIN_VERSION_base(4,4,0)+instance MonadZip μ ⇒ MonadZip (FinishT f μ) where+  mzipWith f m₁ m₂ =+    FinishT $ mzipWith (liftA2 f) (runFinishT m₁) (runFinishT m₂)+#endif+ instance MonadIO μ ⇒ MonadIO (FinishT f μ) where   liftIO = lift . liftIO @@ -96,11 +159,22 @@   restoreM     = defaultRestoreM unStMFinish #endif +-- | A version of 'runFinishT' for the cases where you don't need to+--   distinguish between short-circuits and regular computation results. runFinishT' ∷ Monad μ ⇒ FinishT α μ α → μ α runFinishT' m = runFinishT m >>= return . either id id -runFinish' ∷ Finish α α → α-runFinish' = runIdentity . runFinishT'-+-- | Short-circuit the enclosing computation. finish ∷ Monad μ ⇒ f → FinishT f μ α finish = FinishT . return . Left++-- | An alias for 'FinishT' over 'Identity'.+type Finish f α = FinishT f Identity α++-- | 'runFinishT' specialized for 'Finish'.+runFinish ∷ Finish f α → Either f α+runFinish = runIdentity . runFinishT++-- | 'runFinishT'' specialized to 'Finish'.+runFinish' ∷ Finish α α → α+runFinish' = runIdentity . runFinishT'
transformers-abort.cabal view
@@ -1,18 +1,17 @@ Name: transformers-abort-Version: 0.5.0.1+Version: 0.6 Category: Control Stability: experimental-Synopsis: A better error monad transformer+Synopsis: Error and short-circuit monad transformers Description:-  This package provides a better error monad transformer for-  the @transformers@ package.+  This package provides error and short-circuit monad transformers.  Homepage: https://github.com/mvv/transformers-abort Bug-Reports: https://github.com/mvv/transformers-abort/issues  Author: Mikhail Vorozhtsov <mikhail.vorozhtsov@gmail.com> Maintainer: Mikhail Vorozhtsov <mikhail.vorozhtsov@gmail.com>-Copyright: 2011 Mikhail Vorozhtsov <mikhail.vorozhtsov@gmail.com>+Copyright: 2011-2016 Mikhail Vorozhtsov <mikhail.vorozhtsov@gmail.com> License: BSD3 License-File: LICENSE @@ -25,13 +24,12 @@  Library   Build-Depends:-    base               >= 4 && < 5,-    transformers       >= 0.2,-    transformers-base  >= 0.4,-    semigroupoids      >= 1.2,-    pointed            >= 2.0.1,-    data-default-class >= 0.0.1,-    monad-control      >= 0.3+    base              >= 4 && < 5,+    transformers      >= 0.2,+    transformers-base >= 0.4,+    semigroupoids     >= 1.2,+    pointed           >= 2.0.1,+    monad-control     >= 0.3   Hs-Source-Dirs: src   GHC-Options: -Wall   Exposed-Modules: