packages feed

chiasma-0.2.0.0: lib/Chiasma/Data/Maybe.hs

module Chiasma.Data.Maybe where

import Control.Monad.Error.Class (MonadError(throwError))

maybeExcept :: MonadError e m => e -> Maybe a -> m a
maybeExcept e Nothing = throwError e
maybeExcept _ (Just a) = return a

findMaybe :: (a -> Maybe b) -> [a] -> Maybe b
findMaybe f as =
  case mapMaybe f as of
    (a : _) -> Just a
    _ -> Nothing

orElse :: Maybe a -> Maybe a -> Maybe a
orElse _ (Just a) = Just a
orElse fallback Nothing = fallback