module Shared ( defRunMaybeT, (<$$>), MaybeT(..), ifF, ifM, (<:), (<->) ) where import Data.Maybe import Control.Monad.Trans.Maybe defRunMaybeT :: Monad m => a -> MaybeT m a -> m a defRunMaybeT defValue m = fromMaybe defValue <$> runMaybeT m (<$$>) :: (Functor f, Functor g) => (a -> b) -> f (g a) -> f (g b) (<$$>) = fmap . fmap ifF :: Bool -> a -> a -> a ifF cond x y = if cond then x else y ifF' :: a -> a -> Bool -> a ifF' x y cond = if cond then x else y ifM :: Monad m => m Bool -> m a -> m a -> m a ifM cond m1 m2 = cond >>= ifF' m1 m2 (<:) :: Monad m => m Bool -> m a -> m a -> m a (<:) = ifM (<->) :: (a -> b) -> a -> b (<->) = ($)