sqel-0.0.1.0: lib/Sqel/Text/Case.hs
module Sqel.Text.Case where
import Data.Char (isLower, isUpper, toLower)
import Data.Composition ((.:))
unCamelCaseString :: Char -> String -> String
unCamelCaseString sep =
fmap toLower . reverse . foldl f []
where
f [] c =
[c]
f (h1 : h2 : t) c | isLower c && isUpper h1 && isUpper h2 =
c : h1 : sep : h2 : t
f (h : t) c | isUpper c && isLower h =
c : sep : h : t
f z c =
c : z
unCamelCase :: Char -> String -> Text
unCamelCase =
toText .: unCamelCaseString
unCamelCaseText :: Char -> Text -> Text
unCamelCaseText sep =
unCamelCase sep . toString