super-user-spark-0.4.0.1: src/SuperUserSpark/Utils.hs
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
module SuperUserSpark.Utils where
import Import
import Data.List (isInfixOf)
incase
:: MonadReader c m
=> (c -> Bool) -> m () -> m ()
incase bf func = do
b <- asks bf
when b func
incaseElse
:: MonadReader c m
=> (c -> Bool) -> m a -> m a -> m a
incaseElse bf funcif funcelse = do
b <- asks bf
if b
then funcif
else funcelse
containsNewline :: String -> Bool
containsNewline f = any (\c -> elem c f) ['\n', '\r']
containsMultipleConsequtiveSlashes :: String -> Bool
containsMultipleConsequtiveSlashes = isInfixOf "//"
(&&&) :: (a -> Bool) -> (a -> Bool) -> a -> Bool
(&&&) f g = \a -> f a && g a
(<$$>) :: (a -> b) -> IO (Either e a) -> IO (Either e b)
(<$$>) f fa = do
a <- fa
pure $ f <$> a
(<**>) :: IO (Either e (a -> b)) -> IO (Either e a) -> IO (Either e b)
(<**>) fa fb = do
e1 <- fa
e2 <- fb
pure $ e1 <*> e2