modulo-1.1: src/Language/Modulo/Util/Mangle.hs
{-# 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 "_"