module Chiasma.Data.Maybe where import Control.Monad.Error.Class (MonadError(throwError)) maybeExcept :: MonadError e m => e -> Maybe a -> m a maybeExcept :: e -> Maybe a -> m a maybeExcept e e Maybe a Nothing = e -> m a forall e (m :: * -> *) a. MonadError e m => e -> m a throwError e e maybeExcept e _ (Just a a) = a -> m a forall (m :: * -> *) a. Monad m => a -> m a return a a findMaybe :: (a -> Maybe b) -> [a] -> Maybe b findMaybe :: (a -> Maybe b) -> [a] -> Maybe b findMaybe a -> Maybe b f [a] as = case (a -> Maybe b) -> [a] -> [b] forall a b. (a -> Maybe b) -> [a] -> [b] mapMaybe a -> Maybe b f [a] as of (b a : [b] _) -> b -> Maybe b forall a. a -> Maybe a Just b a [b] _ -> Maybe b forall a. Maybe a Nothing orElse :: Maybe a -> Maybe a -> Maybe a orElse :: Maybe a -> Maybe a -> Maybe a orElse Maybe a _ (Just a a) = a -> Maybe a forall a. a -> Maybe a Just a a orElse Maybe a fallback Maybe a Nothing = Maybe a fallback