module Language.Haskell.Tools.Refactor.Utils.Maybe ( module Language.Haskell.Tools.Refactor.Utils.Maybe , module Data.Maybe , MaybeT(..) ) where import Data.Maybe import Control.Monad import Control.Monad.Trans.Maybe (MaybeT(..)) isJustT :: Monad m => MaybeT m a -> m Bool isJustT m = liftM isJust . runMaybeT $ m isNothingT :: Monad m => MaybeT m a -> m Bool isNothingT m = liftM isNothing . runMaybeT $ m liftMaybe :: Monad m => Maybe a -> MaybeT m a liftMaybe = MaybeT . return fromMaybeT :: Monad m => a -> MaybeT m a -> m a fromMaybeT def = maybeT def id fromMaybeTM :: Monad m => m a -> MaybeT m a -> m a fromMaybeTM def = maybeTM def return maybeT :: Monad m => b -> (a -> b) -> MaybeT m a -> m b maybeT def f x = liftM (maybe def f) (runMaybeT x) maybeTM :: Monad m => m b -> (a -> m b) -> MaybeT m a -> m b maybeTM def f x = runMaybeT x >>= maybe def f