control-monad-failure (empty) → 0.1
raw patch · 3 files changed
+99/−0 lines, 3 filesdep +basedep +extensible-exceptionsdep +mtlsetup-changed
Dependencies added: base, extensible-exceptions, mtl, pretty, template-haskell, transformers
Files
- Control/Monad/Failure.hs +62/−0
- Setup.hs +2/−0
- control-monad-failure.cabal +35/−0
+ Control/Monad/Failure.hs view
@@ -0,0 +1,62 @@+{-# LANGUAGE CPP #-}+{-# LANGUAGE MultiParamTypeClasses #-}+{-# LANGUAGE FlexibleInstances #-}+{-# LANGUAGE OverlappingInstances #-}++{-| Defines the class @MonadFailure@ for monads which can fail.+-}+module Control.Monad.Failure where++import Control.Exception (throw, Exception)+import Control.Monad+#if TRANSFORMERS+import Control.Monad.Trans+import Control.Monad.Trans.Error+import Control.Monad.Trans.List+import Control.Monad.Trans.Reader+import Control.Monad.Trans.State+import Control.Monad.Trans.Writer+import Control.Monad.Trans.RWS+#else+import Control.Monad.Error+import Control.Monad.List+import Control.Monad.Reader+import Control.Monad.State+import Control.Monad.Writer+import Control.Monad.RWS+#endif++import Data.Monoid++class Monad m => MonadFailure e m where+ failure :: e -> m a++-- ----------+-- Instances+-- ----------+instance MonadFailure e Maybe where failure _ = Nothing+instance MonadFailure e [] where failure _ = []++instance Exception e => MonadFailure e IO where+ failure = Control.Exception.throw++instance (Error e) => MonadFailure e (Either e) where+ failure = Left++instance (Error e, Monad m) => MonadFailure e (ErrorT e m) where+ failure = throwError++instance MonadFailure e m => MonadFailure e (ListT m) where+ failure = lift . failure++instance MonadFailure e m => MonadFailure e (ReaderT r m) where+ failure = lift . failure++instance (Monoid w, MonadFailure e m) => MonadFailure e (WriterT w m) where+ failure = lift . failure++instance MonadFailure e m => MonadFailure e (StateT s m) where+ failure = lift . failure++instance (Monoid w, MonadFailure e m) => MonadFailure e (RWST r w s m) where+ failure = lift . failure
+ Setup.hs view
@@ -0,0 +1,2 @@+import Distribution.Simple+main = defaultMain
+ control-monad-failure.cabal view
@@ -0,0 +1,35 @@+name: control-monad-failure+version: 0.1+Cabal-Version: >= 1.2.3+build-type: Simple+license: PublicDomain+author: Pepe Iborra, Michael Snoyman, Nicolas Pouillard+maintainer: pepeiborra@gmail.com+homepage: http://github.com/pepeiborra/control-monad-failure+description: A class for monads which can fail with an error.+synopsis: A class for monads which can fail with an error.+category: Control, Monads+stability: experimental++Flag transformers+ default: False++Flag extensibleExceptionsInBase++Library+ buildable: True+ build-depends: pretty, template-haskell++ if flag(transformers)+ build-depends: transformers+ cpp-options: -DTRANSFORMERS+ else+ build-depends: mtl+ if flag(extensibleExceptionsInBase)+ build-depends: base >= 4 && < 5+ else+ build-depends: base >= 3 && < 4, extensible-exceptions++ extensions: MultiParamTypeClasses, FlexibleInstances+ exposed-modules:+ Control.Monad.Failure