-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | Libraries for processing GHC Core
--
-- Libraries for processing GHC Core
@package extcore
@version 1.0.2
module Language.Core.Encoding
type UserString = String
type EncodedString = String
zEncodeString :: UserString -> EncodedString
unencodedChar :: Char -> Bool
encode_ch :: Char -> EncodedString
zDecodeString :: EncodedString -> UserString
decode_upper :: Char -> Char
decode_lower :: Char -> Char
decode_num_esc :: Char -> EncodedString -> UserString
decode_tuple :: Char -> EncodedString -> UserString
maybe_tuple :: UserString -> Maybe EncodedString
count_commas :: Int -> String -> (Int, String)
module Language.Core.ParseGlue
data ParseResult a
OkP :: a -> ParseResult a
FailP :: String -> ParseResult a
type P a = String -> Int -> ParseResult a
thenP :: P a -> (a -> P b) -> P b
returnP :: a -> P a
failP :: String -> P a
data Token
TKmodule :: Token
TKdata :: Token
TKnewtype :: Token
TKforall :: Token
TKrec :: Token
TKlet :: Token
TKin :: Token
TKcase :: Token
TKof :: Token
TKcast :: Token
TKnote :: Token
TKexternal :: Token
TKdynexternal :: Token
TKlabel :: Token
TKwild :: Token
TKoparen :: Token
TKcparen :: Token
TKobrace :: Token
TKcbrace :: Token
TKhash :: Token
TKeq :: Token
TKcoloncolon :: Token
TKstar :: Token
TKrarrow :: Token
TKlambda :: Token
TKbiglambda :: Token
TKat :: Token
TKdot :: Token
TKcolon :: Token
TKquestion :: Token
TKsemicolon :: Token
TKname :: String -> Token
TKcname :: String -> Token
TKinteger :: Integer -> Token
TKrational :: Rational -> Token
TKstring :: String -> Token
TKchar :: Char -> Token
TKsym :: Token
TKtrans :: Token
TKunsafe :: Token
TKleft :: Token
TKright :: Token
TKinst :: Token
TKpercent :: Token
TKEOF :: Token
splitModuleName :: EncodedString -> ([String], String)
instance Show a => Show (ParseResult a)
module Language.Core.Env
eempty :: Map a b
elookup :: (Eq a, Ord a) => Map a b -> a -> Maybe b
eextend :: Ord a => Map a b -> (a, b) -> Map a b
edomain :: Eq a => Map a b -> [a]
efromlist :: Ord a => [(a, b)] -> Map a b
etolist :: Map a b -> [(a, b)]
efilter :: Ord a => Map a b -> (a -> Bool) -> Map a b
eremove :: (Eq a, Ord a) => Map a b -> a -> Map a b
module Language.Core.Core
data Module
Module :: AnMname -> [Tdef] -> [Vdefg] -> Module
data Tdef
Data :: (Qual Tcon) -> [Tbind] -> [Cdef] -> Tdef
Newtype :: (Qual Tcon) -> (Qual Tcon) -> [Tbind] -> Ty -> Tdef
data Cdef
Constr :: (Qual Dcon) -> [Tbind] -> [Ty] -> Cdef
data Vdefg
Rec :: [Vdef] -> Vdefg
Nonrec :: Vdef -> Vdefg
newtype Vdef
Vdef :: (Qual Var, Ty, Exp) -> Vdef
data Exp
Var :: (Qual Var) -> Exp
Dcon :: (Qual Dcon) -> Exp
Lit :: Lit -> Exp
App :: Exp -> Exp -> Exp
Appt :: Exp -> Ty -> Exp
Lam :: Bind -> Exp -> Exp
Let :: Vdefg -> Exp -> Exp
Case :: Exp -> Vbind -> Ty -> [Alt] -> Exp
Cast :: Exp -> Ty -> Exp
Note :: String -> Exp -> Exp
External :: String -> Ty -> Exp
data Bind
Vb :: Vbind -> Bind
Tb :: Tbind -> Bind
data Alt
Acon :: (Qual Dcon) -> [Tbind] -> [Vbind] -> Exp -> Alt
Alit :: Lit -> Exp -> Alt
Adefault :: Exp -> Alt
type Vbind = (Var, Ty)
type Tbind = (Tvar, Kind)
data Ty
Tvar :: Tvar -> Ty
Tcon :: (Qual Tcon) -> Ty
Tapp :: Ty -> Ty -> Ty
Tforall :: Tbind -> Ty -> Ty
TransCoercion :: Ty -> Ty -> Ty
SymCoercion :: Ty -> Ty
UnsafeCoercion :: Ty -> Ty -> Ty
InstCoercion :: Ty -> Ty -> Ty
LeftCoercion :: Ty -> Ty
RightCoercion :: Ty -> Ty
data Kind
Klifted :: Kind
Kunlifted :: Kind
Kopen :: Kind
Karrow :: Kind -> Kind -> Kind
Keq :: Ty -> Ty -> Kind
data CoercionKind
DefinedCoercion :: [Tbind] -> (Ty, Ty) -> CoercionKind
data KindOrCoercion
Kind :: Kind -> KindOrCoercion
Coercion :: CoercionKind -> KindOrCoercion
data Lit
Literal :: CoreLit -> Ty -> Lit
data CoreLit
Lint :: Integer -> CoreLit
Lrational :: Rational -> CoreLit
Lchar :: Char -> CoreLit
Lstring :: String -> CoreLit
type Mname = Maybe AnMname
newtype AnMname
M :: (Pname, [Id], Id) -> AnMname
newtype Pname
P :: Id -> Pname
type Var = Id
type Tvar = Id
type Tcon = Id
type Dcon = Id
type Qual t = (Mname, t)
qual :: AnMname -> t -> Qual t
unqual :: t -> Qual t
getModule :: Qual t -> Mname
type Id = String
eqKind :: Kind -> Kind -> Bool
splitTyConApp_maybe :: Ty -> Maybe (Qual Tcon, [Ty])
equalTy :: Ty -> Ty -> Bool
subKindOf :: Kind -> Kind -> Bool
baseKind :: Kind -> Bool
isPrimVar :: (Maybe AnMname, t) -> Bool
primMname :: AnMname
errMname :: AnMname
mkBaseMname :: Id -> AnMname
mkPrimMname :: Id -> AnMname
basePkg :: Pname
mainPkg :: Pname
primPkg :: Pname
ghcPrefix :: [[Char]]
mainPrefix :: [a]
boolMname :: AnMname
mainVar :: Qual [Char]
wrapperMainVar :: Qual [Char]
mainMname :: AnMname
wrapperMainMname :: AnMname
wrapperMainAnMname :: Maybe AnMname
dcTrue :: Dcon
dcFalse :: Dcon
tcArrow :: Qual Tcon
tArrow :: Ty -> Ty -> Ty
mkFunTy :: Ty -> Ty -> Ty
ktArrow :: Kind
maxUtuple :: Int
tcUtuple :: Int -> Qual Tcon
ktUtuple :: Int -> Kind
tUtuple :: [Ty] -> Ty
isUtupleTy :: Ty -> Bool
dcUtuple :: Int -> Qual Dcon
isUtupleDc :: Qual Dcon -> Bool
dcUtupleTy :: Int -> Ty
utuple :: [Ty] -> [Exp] -> Exp
flattenBinds :: [Vdefg] -> [Vdef]
unitMname :: AnMname
instance Typeable CoreLit
instance Typeable Pname
instance Typeable AnMname
instance Typeable Ty
instance Typeable Kind
instance Typeable Lit
instance Typeable Bind
instance Typeable Vdef
instance Typeable Exp
instance Typeable Alt
instance Typeable Vdefg
instance Typeable Cdef
instance Typeable Tdef
instance Typeable Module
instance Data CoreLit
instance Eq CoreLit
instance Eq Pname
instance Ord Pname
instance Data Pname
instance Eq AnMname
instance Ord AnMname
instance Data AnMname
instance Data Ty
instance Data Kind
instance Data Lit
instance Eq Lit
instance Data Bind
instance Data Vdef
instance Data Exp
instance Data Alt
instance Data Vdefg
instance Data Cdef
instance Data Tdef
instance Data Module
instance Eq Ty
module Language.Core.Printer
indent :: Doc -> Doc
pmodule :: Module -> Doc
ptdef :: Tdef -> Doc
pcdef :: Cdef -> Doc
pname :: String -> Doc
pqname :: (Maybe AnMname, String) -> Doc
pmname :: Maybe AnMname -> Doc
panmname :: AnMname -> Doc
hierModuleSeparator :: Doc
ptbind :: Tbind -> Doc
pattbind :: (Tvar, Kind) -> Doc
pakind :: Kind -> Doc
pkind :: Kind -> Doc
peqkind :: (Ty, Ty) -> Doc
paty :: Ty -> Doc
pbty :: Ty -> Doc
pty :: Ty -> Doc
pappty :: Ty -> [Ty] -> Doc
pforall :: [Tbind] -> Ty -> Doc
pvdefg :: Vdefg -> Doc
pvdef :: Vdef -> Doc
paexp :: Exp -> Doc
plamexp :: [Bind] -> Exp -> Doc
pbind :: Bind -> Doc
pfexp :: Exp -> Doc
pappexp :: Exp -> [Either Exp Ty] -> Doc
pexp :: Exp -> Doc
pvbind :: (String, Ty) -> Doc
palt :: Alt -> Doc
plit :: Lit -> Doc
pclit :: CoreLit -> Doc
pstring :: String -> Doc
escape :: String -> String
instance Show AnMname
instance Show KindOrCoercion
instance Show CoreLit
instance Show Lit
instance Show CoercionKind
instance Show Kind
instance Show Ty
instance Show Alt
instance Show Exp
instance Show Vdef
instance Show Vdefg
instance Show Cdef
instance Show Tdef
instance Show Module
module Language.Core.CoreUtils
splitDataConApp_maybe :: Exp -> Maybe (Qual Dcon, [Ty], [Exp])
splitApp :: Exp -> (Exp, [Exp])
splitAppIgnoreCasts :: Exp -> (Exp, [Exp])
splitFunTy_maybe :: Ty -> Maybe ([Ty], Ty)
splitFunTy2_maybe :: Ty -> Maybe (Ty, Ty)
vdefNamesQ :: [Vdef] -> [Qual Var]
vdefNames :: [Vdef] -> [Var]
vdefTys :: [Vdef] -> [Ty]
vdefgNames :: Vdefg -> [Var]
vdefgNamesQ :: Vdefg -> [Qual Var]
vdefgTys :: Vdefg -> [Ty]
vdefgBodies :: Vdefg -> [Exp]
vbNames :: [Vbind] -> [Var]
substIn :: Data a => Var -> Var -> a -> a
substVars :: Data a => [Var] -> [Var] -> a -> a
tdefNames :: [Tdef] -> [Qual Var]
tdefDcons :: [Tdef] -> [Qual Var]
tdefTcons :: [Tdef] -> [Qual Var]
filterVdefgs :: (Vdef -> Bool) -> [Vdefg] -> [Vdefg]
applyNewtype :: CoercionKind -> [Ty] -> (Ty, Ty)
substl :: [Tvar] -> [Ty] -> Ty -> Ty
freeTvars :: Ty -> [Tvar]
freshTvar :: [Tvar] -> Tvar
splitLambda :: Exp -> ([Bind], Exp)
vbinds :: [Bind] -> [(Var, Ty)]
splitBinds :: [Bind] -> ([(Tvar, Kind)], [(Var, Ty)])
freeVars :: Exp -> [Qual Var]
freeVarss :: [Exp] -> [Qual Var]
mapVdefg :: Monad m => (Vdef -> m Vdef) -> Vdefg -> m Vdefg
module Language.Core.Interp
evalProgram :: [Module] -> IO Value
instance Eq PrimValue
instance Show PrimValue
instance Show Value
instance Show HeapValue
instance Show Heap
instance Error Value
module Language.Core.DebugPrinter
removeTypeBinds :: Data a => a -> a
pmodule :: Print Module
-- | Options controlling the printing of external core.
data PrintOpts
PrintOpts :: Bool -> Bool -> Bool -> Bool -> Bool -> Bool -> PrintOpts
-- | Whether to decode names into their recognisable form, i.e.
-- Data.List.nub instead of DataziListzinub.
decodeNames :: PrintOpts -> Bool
-- | Whether to ignore module names on fully qualified names, i.e. nub
-- instead of Data.List.nub.
ignoreQuals :: PrintOpts -> Bool
-- | Whether to ignore kinds when printing out.
ignoreKinds :: PrintOpts -> Bool
-- | Whether to ignore type annotations when printing out.
ignoreTypeBinds :: PrintOpts -> Bool
-- | Whether to ignore things that look like dictionary parameters (ignores
-- all parameters where the name begins with a dollar sign).
ignoreDicts :: PrintOpts -> Bool
-- | Whether to write Haskell operators in infix form, i.e. p + x rather
-- than (+) p x.
infixOperators :: PrintOpts -> Bool
-- | The default printing options. Everything is True except ignoreQuals.
defOpts :: PrintOpts
module Language.Core.Merge
merge :: Map (Qual Var) (Qual Var) -> [Module] -> Module
uniqueNamesIn :: [Vdefg] -> [Tdef] -> ([Qual Var], [Qual Dcon], [Qual Tcon])
nonUniqueNamesIn :: [Vdef] -> [Tdef] -> [Qual Var]
module Language.Core.ElimDeadCode
elimDeadCode :: Bool -> Module -> Module
module Language.Core.Check
checkModule :: Menv -> Module -> CheckRes Menv
envsModule :: Menv -> Module -> Menv
checkExpr :: AnMname -> Menv -> Tcenv -> Cenv -> Venv -> Tvenv -> Exp -> Ty
checkType :: AnMname -> Menv -> Tcenv -> Tvenv -> Ty -> Kind
primCoercionError :: Show a => a -> b
type Menv = Map AnMname Envs
type Venv = Map Var Ty
type Tvenv = Map Tvar Kind
type Tcenv = Map Tcon KindOrCoercion
data Envs
Envs :: Tcenv -> Cenv -> Venv -> Envs
tcenv_ :: Envs -> Tcenv
cenv_ :: Envs -> Cenv
venv_ :: Envs -> Venv
data CheckRes a
OkC :: a -> CheckRes a
FailC :: String -> CheckRes a
splitTy :: Ty -> ([Tbind], [Ty], Ty)
substl :: [Tvar] -> [Ty] -> Ty -> Ty
mkTypeEnvsNoChecking :: [Tdef] -> (Tcenv, Cenv)
type NtEnv = Map Tcon CoercionKind
mkNtEnv :: Menv -> NtEnv
instance Monad CheckRes
-- | This module currently is buggy. (Patches welcome.) Use
-- Language.Core.Parser instead. See also
-- Language.Core.ParseGlue.
module Language.Core.ParsecParser
parseCore :: FilePath -> IO (Either ParseError Module)
coreModuleName :: Parser AnMname
coreTcon :: Parser ATyOp
coreQualifiedName :: Parser (Mname, Id)
upperName :: Parser String
identifier :: Parser String
coreType :: Parser Ty
coreKind :: Parser Kind
coreTbinds :: Parser [Tbind]
parens :: CharParser st a -> CharParser st a
braces :: CharParser st a -> CharParser st a
topVbind :: Parser (Qual Var, Ty)
pt :: Show a => CharParser () a -> String -> IO ()
module Language.Core.Prep
prepModule :: Menv -> Module -> Module
boundVars :: Exp -> [Id]
boundVarsVdefs :: Vdefg -> [Id]
boundVarsVdef :: Vdef -> [Id]
boundVarsAlts :: [Alt] -> [Var]
boundVarsAlt :: Alt -> [Var]
substNewtys :: NtEnv -> Ty -> Ty
newtypeCoercion_maybe :: NtEnv -> Ty -> Maybe CoercionKind
mkTapp :: Ty -> [Ty] -> Ty
initCounter :: Int
type PrepM = State Int
freshVar :: PrepM String
module Language.Core.Prims
initialEnv :: Menv
primEnv :: Envs
primId :: String -> Qual Id
tIntzh :: Ty
tInt64zh :: Ty
tCharzh :: Ty
tFloatzh :: Ty
tAddrzh :: Ty
tDoublezh :: Ty
tcStatezh :: Qual Tcon
tWordzh :: Ty
tWord64zh :: Ty
tByteArrayzh :: Ty
tcStablePtrzh :: Qual Tcon
tcIO :: Qual Tcon
mkInitialEnv :: [Module] -> IO Menv
mkTypeEnv :: Menv -> Module -> IO Menv
tRWS :: Ty
tBool :: Ty
tcBool :: Qual Tcon
ioBaseMname :: AnMname
module Language.Core.Parser
parse :: P Module
module Language.Core.Dependencies
getDependencies :: [FilePath] -> [FilePath] -> IO [(FilePath, Module)]