packages feed

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 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