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