{-# LANGUAGE DisambiguateRecordFields, TypeFamilies, StandaloneDeriving, DeriveFunctor, DeriveFoldable, GeneralizedNewtypeDeriving #-} ------------------------------------------------------------------------------------- -- | -- Copyright : (c) Hans Hoglund 2012 -- License : BSD-style -- Maintainer : hans@hanshoglund.se -- Stability : experimental -- Portability : GHC -- -- Manglers for various kinds of identifiers. -- ------------------------------------------------------------------------------------- module Language.Modulo.Util.Mangle ( mixedCase, capitalCase, sepCase ) where import Data.Semigroup import Data.Semigroup import Language.Modulo.Util -- | -- Mangle an indentifier in mixed case, i.e. @[foo, bar]@ becomes @fooBar@. mixedCase :: [String] -> String mixedCase [] = [] mixedCase (x:xs) = mconcat $ toLowerString x : fmap toCapitalString xs -- | -- Mangle an indentifier in capital case, i.e. @[foo, bar]@ becomes @FooBar@. capitalCase :: [String] -> String capitalCase = mconcat . fmap toCapitalString -- | -- Mangle an indentifier using the underscore as separator, i.e. @[foo, bar]@ becomes @foo_bar@. sepCase :: [String] -> String sepCase = concatSep "_"