Copyright 2009 Jake Wheat
This file contains some generic utility stuff
>
> module Database.HsSqlPpp.Utils where
> import Data.Maybe
> import Data.List
> import Data.Either
> import Control.Arrow
> import Control.Monad.Error
> import Control.Applicative
> errorWhen :: (Error a) =>
> Bool -> a -> Either a ()
> errorWhen cond = when cond . Left
> liftME :: a -> Maybe b -> Either a b
> liftME d m = case m of
> Nothing -> Left d
> Just b -> Right b
> both :: (a->b) -> (a,a) -> (b,b)
> both fn = fn *** fn
> (<:>) :: (Applicative f) =>
> f a -> f [a] -> f [a]
> (<:>) a b = (:) <$> a <*> b
> eitherToMaybe :: Either a b -> Maybe b
> eitherToMaybe (Left _) = Nothing
> eitherToMaybe (Right b) = Just b
> fromRight :: b -> Either a b -> b
> fromRight b (Left _) = b
> fromRight _ (Right r) = r
> replace :: (Eq a) => [a] -> [a] -> [a] -> [a]
> replace _ _ [] = []
> replace old new xs@(y:ys) =
> case stripPrefix old xs of
> Nothing -> y : replace old new ys
> Just ys' -> new ++ replace old new ys'
> split :: Char -> String -> [String]
> split _ "" = []
> split c s = let (l, s') = break (== c) s
> in l : case s' of
> [] -> []
> (_:s'') -> split c s''