module Text.Inflections.Camelize ( camelize, camelizeCustom ) where
import Text.Inflections.Parse.Types (Word(..))
import Data.Char (toUpper, toLower)
camelize
:: [Word]
-> String
camelize = camelizeCustom True
camelizeCustom
:: Bool
-> [Word]
-> String
camelizeCustom isFirstCap = concatMap (caseForWord isFirstCap) . isFirstList
caseForWord :: Bool -> (Word, Bool) -> String
caseForWord True (Word (c:cs), True) = toUpper c : cs
caseForWord False (Word (c:cs), True) = toLower c : cs
caseForWord _ (Word (c:cs), _) = toUpper c : cs
caseForWord _ (Word [], _) = []
caseForWord _ (Acronym s, _) = s
isFirstList :: [a] -> [(a, Bool)]
isFirstList xs = zip xs $ True : repeat False