diff options
Diffstat (limited to 'Utility/Monad.hs')
-rw-r--r-- | Utility/Monad.hs | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/Utility/Monad.hs b/Utility/Monad.hs index b66419f76..4f5a6d244 100644 --- a/Utility/Monad.hs +++ b/Utility/Monad.hs @@ -8,7 +8,7 @@ module Utility.Monad where import Data.Maybe -import Control.Monad (liftM) +import Control.Monad {- Return the first value from a list, if any, satisfying the given - predicate -} @@ -53,6 +53,16 @@ ma <&&> mb = ifM ma ( mb , return False ) infixr 3 <&&> infixr 2 <||> +{- Left-to-right Kleisli composition with a pure left/right hand side. -} +(*>=>) :: Monad m => (a -> b) -> (b -> m c) -> (a -> m c) +f *>=> g = return . f >=> g + +(>=*>) :: Monad m => (a -> m b) -> (b -> c) -> (a -> m c) +f >=*> g = f >=> return . g + +{- Same fixity as >=> and <=< -} +infixr 1 *>=>, >=*> + {- Runs an action, passing its value to an observer before returning it. -} observe :: Monad m => (a -> m b) -> m a -> m a observe observer a = do |