packages feed

regex-generator-0.1.0.0: src/Text/Regex/Regen/Util.hs

module Text.Regex.Regen.Util where

import Control.Monad.Catch (Exception, MonadCatch, SomeException, try)
import Data.Either (either)

mwhen :: Monoid m => Bool -> m -> m
mwhen b m = if b then m else mempty

munless :: Monoid m => Bool -> m -> m
munless b m = if b then mempty else m

infixr 8 .:
(.:) :: (c -> d) -> (a -> b -> c) -> a -> b -> d
(.:) = (.).(.)

infixr 3 &&&
(&&&) :: (a -> Bool) -> (a -> Bool) -> a -> Bool
p &&& q = \a -> p a && q a

infixr 2 |||
(|||) :: (a -> Bool) -> (a -> Bool) -> a -> Bool
p ||| q = \a -> p a || q a

hush :: Either e a -> Maybe a
hush = either (const Nothing) Just

tryMaybe :: MonadCatch m => m a -> m (Maybe a)
tryMaybe m = hush <$> try' m
    where
    try' :: MonadCatch m => m a -> m (Either SomeException a)
    try' = try