-- 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 module Language.Core.Encoding type UserString = String type EncodedString = String zEncodeString :: UserString -> EncodedString unencodedChar :: Char -> Bool encode_ch :: Char -> EncodedString zDecodeString :: EncodedString -> UserString decode_lower :: Char -> Char decode_upper :: 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 mkPrimMname :: Id -> AnMname mkBaseMname :: Id -> 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 Pname instance Typeable AnMname instance Typeable CoreLit instance Typeable Lit instance Typeable Kind instance Typeable Ty instance Typeable Alt instance Typeable Bind instance Typeable Exp instance Typeable Vdef instance Typeable Vdefg instance Typeable Cdef instance Typeable Tdef instance Typeable Module instance Eq Pname instance Ord Pname instance Data Pname instance Eq AnMname instance Ord AnMname instance Data AnMname instance Data CoreLit instance Eq CoreLit instance Data Lit instance Eq Lit instance Data Kind instance Data Ty instance Data Alt instance Data Bind instance Data Exp instance Data Vdef instance Data Vdefg instance Data Cdef instance Data Tdef instance Data Module instance Eq Ty module Language.Core.Printer 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 Show Heap instance Eq PrimValue instance Show PrimValue instance Show Value instance Show HeapValue 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 module Language.Core.ParsecParser parseCore :: FilePath -> IO (Either ParseError Module) coreModule :: Parser Module coreModuleName :: Parser AnMname corePackageName :: Parser Pname coreHierModuleNames :: Parser ([Id], Id) upperName :: Parser String coreTdefs :: Parser [Tdef] coreTdef :: Parser Tdef withSemi :: Parser a -> Parser a withTerminator :: Parser a -> String -> Parser a coreDataDecl :: Parser Tdef coreNewtypeDecl :: Parser Tdef coreQualifiedCon :: Parser (Mname, Id) isUpperName :: String -> Bool coreQualifiedName :: Parser (Mname, Id) coreTbinds :: Parser [Tbind] coreTbindsOrTyGen :: CharParser () String -> Parser ([Tbind], [Ty]) coreTbind :: Parser Tbind coreTbindGen :: CharParser () a -> Parser Tbind coreTbindGen' :: Parser (String, Kind) coreCdefs :: Parser [Cdef] coreCdef :: Parser Cdef coreTRep :: Parser Ty coreType :: Parser Ty coreBty :: Parser Ty coreAtySaturated :: Parser Ty coreAty :: Parser ATyOp coreTcon :: Parser ATyOp coreTvarOrQualifiedCon :: Parser Ty data CoercionTy TransC :: CoercionTy InstC :: CoercionTy SymC :: CoercionTy UnsafeC :: CoercionTy LeftC :: CoercionTy RightC :: CoercionTy transCo :: Parser CoercionTy unsafeCo :: Parser CoercionTy instCo :: Parser CoercionTy leftCo :: Parser CoercionTy rightCo :: Parser CoercionTy symCo :: Parser CoercionTy coreForallTy :: Parser Ty coreKind :: Parser Kind coreAtomicKind :: Parser Kind liftedKind :: Parser Kind unliftedKind :: Parser Kind openKind :: Parser Kind equalityKind :: Parser (Ty, Ty) data ATyOp ATy :: Ty -> ATyOp Trans :: ([Ty] -> Ty) -> ATyOp Sym :: ([Ty] -> Ty) -> ATyOp Unsafe :: ([Ty] -> Ty) -> ATyOp LeftCo :: ([Ty] -> Ty) -> ATyOp RightCo :: ([Ty] -> Ty) -> ATyOp InstCo :: ([Ty] -> Ty) -> ATyOp coreVdefGroups :: Parser [Vdefg] coreVdefg :: Parser Vdefg coreRecVdef :: Parser Vdefg coreNonrecVdef :: Parser Vdefg coreVdef :: Parser Vdef coreAtomicExp :: Parser Exp coreFullExp :: Parser Exp coreAppExp :: Parser Exp coreDconOrVar :: Parser Exp coreLit :: Parser Exp coreLiteral :: Parser Lit coreLam :: Parser Exp coreLet :: Parser Exp coreCase :: Parser Exp coreCast :: Parser Exp coreNote :: Parser Exp coreExternal :: Parser Exp coreLabel :: Parser Exp coreLambdaBinds :: Parser [Bind] coreBind :: Parser Bind coreVbind :: Parser Bind coreTbinding :: Parser Bind coreAtTbind :: Parser Tbind topVbind :: Parser (Qual Var, Ty) lambdaBind :: Parser (Var, Ty) aCoreVbind :: Parser a -> Parser (a, Ty) aLit :: Parser CoreLit intOrRatLit :: Parser CoreLit intLit :: Parser Integer charLit :: Parser CoreLit stringLit :: Parser CoreLit coreAlts :: Parser [Alt] coreAlt :: Parser Alt conAlt :: Parser Alt caseVarBinds :: Parser ([Tbind], [Vbind]) litAlt :: Parser Alt defaultAlt :: Parser Alt extCore :: TokenParser a braces :: CharParser st a -> CharParser st a parens :: CharParser st a -> CharParser st a whiteSpace :: Parser () symbol :: String -> CharParser st String identifier :: Parser String reserved' :: String -> Parser () reserved :: String -> Parser () caseString :: String -> Parser String natural :: CharParser st Integer charLiteral :: CharParser st Char stringLiteral :: CharParser st String extCoreDef :: LanguageDef st 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)]