> module Database.Dawdle.Utils
>  (getFstIfJust
>  ,isCTNumber
>  ,isInt
>  ,maybeToEither
>  ,allTheSame
>  ,normalizeNames
>   )
> where
> import Data.Char
> import Data.List
> getFstIfJust :: (a, Maybe b) -> Maybe a
> getFstIfJust (a,Just _) = Just a
> getFstIfJust _ = Nothing
> isCTNumber :: String -> Bool
> isCTNumber = all (\x -> isNumber x || x `elem` ['-','.'])
> isInt :: String -> Bool
> isInt = all (\x -> isNumber x || x =='-')
> maybeToEither :: String -> Maybe a -> Either String a
> maybeToEither _ (Just x) = Right x
> maybeToEither s Nothing = Left s
> allTheSame :: (Eq a) => [a] -> Bool
> allTheSame xs = and $ map (== head xs) (tail xs)
> normalizeNames :: [String] -> [String]
> normalizeNames = map normalize
>  where
>    normalize = map toLower . (filter (\x -> x=='_' || isAlphaNum x)) . intercalate "_" . words