-- | Extra monadic functions. module Control.Monad.Extra where import Control.Monad import Data.Maybe -- | Word version of flip (>>=). bind :: (Monad m) => (a -> m b) -> m a -> m b bind = flip (>>=) -- | When the value is Just. whenJust :: Monad m => Maybe a -> (a -> m ()) -> m () whenJust (Just a) m = m a whenJust Nothing _ = return () -- | Wrap up a form in a Maybe. just :: Functor m => m a -> m (Maybe a) just = fmap Just -- | Flip of mapMaybe. forMaybe :: [a] -> (a -> Maybe b) -> [b] forMaybe = flip mapMaybe -- | Monadic version of maybe. maybeM :: (Monad m) => a -> (a1 -> m a) -> Maybe a1 -> m a maybeM nil cons a = maybe (return nil) cons a -- | Do any of the (monadic) predicates match? anyM :: Monad m => (a -> m Bool) -> [a] -> m Bool anyM p l = return . not . null =<< filterM p l