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


-- | Manipulate name strings for TH
--   
--   This package includes functions to manipulate name string and extra
--   library functions for Template Haskell.
@package names-th
@version 0.3.0.1


-- | This module provides extra helper functions complementing
--   <a>Language.Haskell.TH.Lib</a>
module Language.Haskell.TH.Lib.Extra

-- | Integer literal template from <a>Integral</a> types.
integralE :: Integral a => a -> ExpQ

-- | Generate declaration template from name, type and expression.
simpleValD :: Name -> TypeQ -> ExpQ -> Q [Dec]

-- | May generate declaration template.
maybeD :: (a -> Q [Dec]) -> Maybe a -> Q [Dec]

-- | Helper function for pretty printing <a>Q</a> Monad.
pprQ :: (Functor m, Quasi m, Ppr a) => Q a -> m Doc

-- | Print compile warnings from TH code.
reportWarning :: String -> Q ()

-- | Print compile errors from TH code.
reportError :: String -> Q ()


-- | This module provides camelcased <a>Name</a> for Template Haskell
module Language.Haskell.TH.Name.CamelCase

-- | Type to wrap constructor's <a>Name</a>.
newtype ConName
ConName :: Name -> ConName

-- | Get wrapped <a>Name</a>
[conName] :: ConName -> Name

-- | Make constructor name from <a>String</a>.
toConName :: String -> ConName

-- | Type to wrap variable's <a>Name</a>.
newtype VarName
VarName :: Name -> VarName

-- | Get wrapped <a>Name</a>
[varName] :: VarName -> Name

-- | Make variable name from <a>String</a>.
toVarName :: String -> VarName

-- | Make camel-cased constructor name from <a>String</a>.
conCamelcaseName :: String -> ConName

-- | Make camel-cased variable name from <a>String</a>.
varCamelcaseName :: String -> VarName

-- | Make type constructor <a>TypeQ</a> monad from constructor name type.
toTypeCon :: ConName -> TypeQ

-- | Make data constructor <a>ExpQ</a> monad from constructor name type.
toDataCon :: ConName -> ExpQ

-- | Make variable <a>ExpQ</a> monad from variable name type.
toVarExp :: VarName -> ExpQ

-- | Make pattern <a>PatQ</a> monad from variable name type.
toVarPat :: VarName -> PatQ
