module Fay.Control.Monad.Extra where
import Control.Monad
import Data.Maybe
bind :: (Monad m) => (a -> m b) -> m a -> m b
bind = flip (>>=)
whenJust :: Monad m => Maybe a -> (a -> m ()) -> m ()
whenJust (Just a) m = m a
whenJust Nothing _ = return ()
just :: Functor m => m a -> m (Maybe a)
just = fmap Just
forMaybe :: [a] -> (a -> Maybe b) -> [b]
forMaybe = flip mapMaybe
maybeM :: (Monad m) => a -> (a1 -> m a) -> Maybe a1 -> m a
maybeM nil cons a = maybe (return nil) cons a
anyM :: Monad m => (a -> m Bool) -> [a] -> m Bool
anyM p l = return . not . null =<< filterM p l