-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Convert between various source code casing conventions
--   
--   Converts between camelCase, PascalCase, kebab-case, and three flavors
--   of snake_case.
@package casing
@version 0.1.4.1


-- | Conversions between several common identifier casing conventions:
--   
--   <ul>
--   <li><tt>PascalCase</tt> - no spacing between words, first letter in
--   word is uppercase, all others are lowercase.</li>
--   <li><tt>camelCase</tt> - like <tt>PascalCase</tt>, but the very first
--   letter is lowercase.</li>
--   <li><tt>kebab-case</tt> - everything lowercase, dash delimits
--   words.</li>
--   <li><tt>snake_Case</tt> - underscores delimit words, case is
--   unrestricted.</li>
--   <li><tt>quiet_snake_case</tt> - underscores delimit words, everything
--   lowercase.</li>
--   <li><tt>SCREAMING_SNAKE_CASE</tt> - underscores delimit words,
--   everything uppercase.</li>
--   </ul>
module Text.Casing

-- | An opaque type that represents a parsed identifier.
newtype Identifier a
Identifier :: [a] -> Identifier a
[unIdentifier] :: Identifier a -> [a]

-- | Convert from "humped" casing (<tt>camelCase</tt> or
--   <tt>PascalCase</tt>)
fromHumps :: String -> Identifier String

-- | Convert from <tt>kebab-cased-identifiers</tt>
fromKebab :: String -> Identifier String

-- | Convert from <tt>snake_cased</tt> (either flavor)
fromSnake :: String -> Identifier String
fromWords :: String -> Identifier String

-- | Convert from anything, including mixed casing.
fromAny :: String -> Identifier String

-- | To <tt>camelCase</tt>
toCamel :: Identifier String -> String

-- | To <tt>PascalCase</tt>
toPascal :: Identifier String -> String

-- | To <tt>snake_Case</tt>
toSnake :: Identifier String -> String

-- | To <tt>quiet_snake_case</tt>
toQuietSnake :: Identifier String -> String

-- | To <tt>SCREAMING_SNAKE_CASE</tt>
toScreamingSnake :: Identifier String -> String

-- | To <tt>kebab-case</tt>
toKebab :: Identifier String -> String

-- | To <tt>word Case</tt>
toWords :: Identifier String -> String

-- | Directly convert to <tt>PascalCase</tt> through <a>fromAny</a>
pascal :: String -> String

-- | Directly convert to <tt>camelCase</tt> through <a>fromAny</a>
camel :: String -> String

-- | Directly convert to <tt>snake_Case</tt> through <a>fromAny</a>
snake :: String -> String

-- | Directly convert to <tt>quiet_snake_case</tt> through <a>fromAny</a>
quietSnake :: String -> String

-- | Directly convert to <tt>SCREAMING_SNAKE_CASE</tt> through
--   <a>fromAny</a>
screamingSnake :: String -> String

-- | Directly convert to <tt>kebab-case</tt> through <a>fromAny</a>
kebab :: String -> String

-- | Directly convert to <tt>word Case</tt> through <a>fromAny</a>
wordify :: String -> String

-- | Drop the first word from a parsed identifier. Typical usage is between
--   parsing and writing, e.g.: <tt>toKebab . dropPrefix . fromAny $
--   "strHelloWorld" == "hello-world"</tt>
dropPrefix :: Identifier String -> Identifier String
instance GHC.Classes.Eq a => GHC.Classes.Eq (Text.Casing.Identifier a)
instance Data.Traversable.Traversable Text.Casing.Identifier
instance Data.Foldable.Foldable Text.Casing.Identifier
instance GHC.Show.Show a => GHC.Show.Show (Text.Casing.Identifier a)
instance GHC.Base.Applicative Text.Casing.Identifier
instance GHC.Base.Functor Text.Casing.Identifier
instance GHC.Base.Monad Text.Casing.Identifier
