<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!--Rendered using the Haskell Html Library v0.2--> <HTML ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE >Type</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ><SCRIPT SRC="haddock-util.js" TYPE="text/javascript" ></SCRIPT ><SCRIPT TYPE="text/javascript" >window.onload = function () {setSynopsis("mini_Type.html")};</SCRIPT ></HEAD ><BODY ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="topbar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title" >ghc-6.12.3: The GHC API</TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A ></TD ><TD CLASS="topbut" ><A HREF="doc-index.html" >Index</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="modulebar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><FONT SIZE="6" >Type</FONT ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="section4" ><B >Contents</B ></TD ></TR ><TR ><TD ><DL ><DT ><A HREF="#1" >Main data types representing Types </A ></DT ><DD ><DL ><DT ><A HREF="#2" >Constructing and deconstructing types </A ></DT ><DT ><A HREF="#3" >Common type constructors </A ></DT ><DT ><A HREF="#4" >Predicates on types </A ></DT ></DL ></DD ><DT ><A HREF="#5" >Main data types representing Kinds </A ></DT ><DD ><DL ><DT ><A HREF="#6" >Deconstructing Kinds </A ></DT ><DT ><A HREF="#7" >Common Kinds and SuperKinds </A ></DT ><DT ><A HREF="#8" >Common Kind type constructors </A ></DT ><DT ><A HREF="#9" >Predicates on Kinds </A ></DT ></DL ></DD ><DT ><A HREF="#10" >Type free variables </A ></DT ><DT ><A HREF="#11" >Tidying type related things up for printing </A ></DT ><DT ><A HREF="#12" >Type comparison </A ></DT ><DT ><A HREF="#13" >Forcing evaluation of types </A ></DT ><DT ><A HREF="#14" >Other views onto Types </A ></DT ><DT ><A HREF="#15" >Type representation for the code generator </A ></DT ><DT ><A HREF="#16" >Main type substitution data types </A ></DT ><DD ><DL ><DT ><A HREF="#17" >Manipulating type substitutions </A ></DT ><DT ><A HREF="#18" >Performing substitution on types </A ></DT ></DL ></DD ><DT ><A HREF="#19" >Pretty-printing </A ></DT ></DL ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Description</TD ></TR ><TR ><TD CLASS="doc" >Main functions for manipulating types and type-related things </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Synopsis</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3ATyThing" >TyThing</A > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" >= <A HREF="#v%3AAnId" >AnId</A > <A HREF="Var.html#t%3AId" >Id</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3AADataCon" >ADataCon</A > <A HREF="DataCon.html#t%3ADataCon" >DataCon</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3AATyCon" >ATyCon</A > <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3AAClass" >AClass</A > <A HREF="Class.html#t%3AClass" >Class</A ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3AType" >Type</A > </TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3APredType" >PredType</A > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" >= <A HREF="#v%3AClassP" >ClassP</A > <A HREF="Class.html#t%3AClass" >Class</A > [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3AIParam" >IParam</A > (<A HREF="BasicTypes.html#t%3AIPName" >IPName</A > <A HREF="Name.html#t%3AName" >Name</A >) <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3AEqPred" >EqPred</A > <A HREF="Type.html#t%3AType" >Type</A > <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3AThetaType" >ThetaType</A > = [<A HREF="Type.html#t%3APredType" >PredType</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkTyVarTy" >mkTyVarTy</A > :: <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkTyVarTys" >mkTyVarTys</A > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgetTyVar" >getTyVar</A > :: <A HREF="../base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgetTyVar_maybe" >getTyVar_maybe</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Var.html#t%3ATyVar" >TyVar</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkAppTy" >mkAppTy</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkAppTys" >mkAppTys</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitAppTy" >splitAppTy</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> (<A HREF="Type.html#t%3AType" >Type</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitAppTys" >splitAppTys</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> (<A HREF="Type.html#t%3AType" >Type</A >, [<A HREF="Type.html#t%3AType" >Type</A >])</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitAppTy_maybe" >splitAppTy_maybe</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > (<A HREF="Type.html#t%3AType" >Type</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ArepSplitAppTy_maybe" >repSplitAppTy_maybe</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > (<A HREF="Type.html#t%3AType" >Type</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkFunTy" >mkFunTy</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkFunTys" >mkFunTys</A > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitFunTy" >splitFunTy</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> (<A HREF="Type.html#t%3AType" >Type</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitFunTy_maybe" >splitFunTy_maybe</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > (<A HREF="Type.html#t%3AType" >Type</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitFunTys" >splitFunTys</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> ([<A HREF="Type.html#t%3AType" >Type</A >], <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitFunTysN" >splitFunTysN</A > :: <A HREF="../base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> ([<A HREF="Type.html#t%3AType" >Type</A >], <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AfunResultTy" >funResultTy</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AfunArgTy" >funArgTy</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AzipFunTys" >zipFunTys</A > :: <A HREF="Outputable.html#t%3AOutputable" >Outputable</A > a => [a] -> <A HREF="Type.html#t%3AType" >Type</A > -> ([(a, <A HREF="Type.html#t%3AType" >Type</A >)], <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkTyConApp" >mkTyConApp</A > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkTyConTy" >mkTyConTy</A > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtyConAppTyCon" >tyConAppTyCon</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtyConAppArgs" >tyConAppArgs</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitTyConApp_maybe" >splitTyConApp_maybe</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > (<A HREF="TyCon.html#t%3ATyCon" >TyCon</A >, [<A HREF="Type.html#t%3AType" >Type</A >])</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitTyConApp" >splitTyConApp</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> (<A HREF="TyCon.html#t%3ATyCon" >TyCon</A >, [<A HREF="Type.html#t%3AType" >Type</A >])</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkForAllTy" >mkForAllTy</A > :: <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkForAllTys" >mkForAllTys</A > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitForAllTy_maybe" >splitForAllTy_maybe</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > (<A HREF="Var.html#t%3ATyVar" >TyVar</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitForAllTys" >splitForAllTys</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> ([<A HREF="Var.html#t%3ATyVar" >TyVar</A >], <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AapplyTy" >applyTy</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AapplyTys" >applyTys</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AapplyTysD" >applyTysD</A > :: <A HREF="Outputable.html#t%3ASDoc" >SDoc</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisForAllTy" >isForAllTy</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AdropForAlls" >dropForAlls</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AnewTyConInstRhs" >newTyConInstRhs</A > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AcarefullySplitNewType_maybe" >carefullySplitNewType_maybe</A > :: [<A HREF="TyCon.html#t%3ATyCon" >TyCon</A >] -> <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > ([<A HREF="TyCon.html#t%3ATyCon" >TyCon</A >], <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtyFamInsts" >tyFamInsts</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> [(<A HREF="TyCon.html#t%3ATyCon" >TyCon</A >, [<A HREF="Type.html#t%3AType" >Type</A >])]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApredFamInsts" >predFamInsts</A > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> [(<A HREF="TyCon.html#t%3ATyCon" >TyCon</A >, [<A HREF="Type.html#t%3AType" >Type</A >])]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkPredTy" >mkPredTy</A > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkPredTys" >mkPredTys</A > :: <A HREF="Type.html#t%3AThetaType" >ThetaType</A > -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkFamilyTyConApp" >mkFamilyTyConApp</A > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AfunTyCon" >funTyCon</A > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisTyVarTy" >isTyVarTy</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisFunTy" >isFunTy</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisUnLiftedType" >isUnLiftedType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisUnboxedTupleType" >isUnboxedTupleType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisAlgType" >isAlgType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisClosedAlgType" >isClosedAlgType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisPrimitiveType" >isPrimitiveType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisStrictType" >isStrictType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisStrictPred" >isStrictPred</A > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3AKind" >Kind</A > = <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3ASimpleKind" >SimpleKind</A > = <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3AKindVar" >KindVar</A > = <A HREF="Var.html#t%3ATyVar" >TyVar</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AkindFunResult" >kindFunResult</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitKindFunTys" >splitKindFunTys</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> ([<A HREF="Type.html#t%3AKind" >Kind</A >], <A HREF="Type.html#t%3AKind" >Kind</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsplitKindFunTysN" >splitKindFunTysN</A > :: <A HREF="../base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A > -> <A HREF="Type.html#t%3AKind" >Kind</A > -> ([<A HREF="Type.html#t%3AKind" >Kind</A >], <A HREF="Type.html#t%3AKind" >Kind</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AliftedTypeKind" >liftedTypeKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AunliftedTypeKind" >unliftedTypeKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AopenTypeKind" >openTypeKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AargTypeKind" >argTypeKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AubxTupleKind" >ubxTupleKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtySuperKind" >tySuperKind</A > :: SuperKind</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AcoSuperKind" >coSuperKind</A > :: SuperKind</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AliftedTypeKindTyCon" >liftedTypeKindTyCon</A > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AopenTypeKindTyCon" >openTypeKindTyCon</A > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AunliftedTypeKindTyCon" >unliftedTypeKindTyCon</A > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AargTypeKindTyCon" >argTypeKindTyCon</A > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AubxTupleKindTyCon" >ubxTupleKindTyCon</A > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisLiftedTypeKind" >isLiftedTypeKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisUnliftedTypeKind" >isUnliftedTypeKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisOpenTypeKind" >isOpenTypeKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisUbxTupleKind" >isUbxTupleKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisArgTypeKind" >isArgTypeKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisKind" >isKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisTySuperKind" >isTySuperKind</A > :: SuperKind -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisCoSuperKind" >isCoSuperKind</A > :: SuperKind -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisSuperKind" >isSuperKind</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisCoercionKind" >isCoercionKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisEqPred" >isEqPred</A > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkArrowKind" >mkArrowKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkArrowKinds" >mkArrowKinds</A > :: [<A HREF="Type.html#t%3AKind" >Kind</A >] -> <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisSubArgTypeKind" >isSubArgTypeKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisSubOpenTypeKind" >isSubOpenTypeKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisSubKind" >isSubKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AdefaultKind" >defaultKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AeqKind" >eqKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisSubKindCon" >isSubKindCon</A > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtyVarsOfType" >tyVarsOfType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtyVarsOfTypes" >tyVarsOfTypes</A > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtyVarsOfPred" >tyVarsOfPred</A > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtyVarsOfTheta" >tyVarsOfTheta</A > :: <A HREF="Type.html#t%3AThetaType" >ThetaType</A > -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtypeKind" >typeKind</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AexpandTypeSynonyms" >expandTypeSynonyms</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtidyType" >tidyType</A > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtidyTypes" >tidyTypes</A > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtidyOpenType" >tidyOpenType</A > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> (<A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtidyOpenTypes" >tidyOpenTypes</A > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> (<A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A >, [<A HREF="Type.html#t%3AType" >Type</A >])</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtidyTyVarBndr" >tidyTyVarBndr</A > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> (<A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A >, <A HREF="Var.html#t%3ATyVar" >TyVar</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtidyFreeTyVars" >tidyFreeTyVars</A > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A > -> <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtidyOpenTyVar" >tidyOpenTyVar</A > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> (<A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A >, <A HREF="Var.html#t%3ATyVar" >TyVar</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtidyOpenTyVars" >tidyOpenTyVars</A > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> (<A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A >, [<A HREF="Var.html#t%3ATyVar" >TyVar</A >])</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtidyTopType" >tidyTopType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtidyPred" >tidyPred</A > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3APredType" >PredType</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtidyKind" >tidyKind</A > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="Type.html#t%3AKind" >Kind</A > -> (<A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A >, <A HREF="Type.html#t%3AKind" >Kind</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AcoreEqType" >coreEqType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtcEqType" >tcEqType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtcEqTypes" >tcEqTypes</A > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtcCmpType" >tcCmpType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Ord.html#t%3AOrdering" >Ordering</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtcCmpTypes" >tcCmpTypes</A > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="../base-4.2.0.2/Data-Ord.html#t%3AOrdering" >Ordering</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtcEqPred" >tcEqPred</A > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtcEqPredX" >tcEqPredX</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtcCmpPred" >tcCmpPred</A > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="../base-4.2.0.2/Data-Ord.html#t%3AOrdering" >Ordering</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtcEqTypeX" >tcEqTypeX</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtcPartOfType" >tcPartOfType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtcPartOfPred" >tcPartOfPred</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AseqType" >seqType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29" >()</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AseqTypes" >seqTypes</A > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="../ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29" >()</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AcoreView" >coreView</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtcView" >tcView</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AkindView" >kindView</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ArepType" >repType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3APrimRep" >PrimRep</A > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" >= <A HREF="#v%3AVoidRep" >VoidRep</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3APtrRep" >PtrRep</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3AIntRep" >IntRep</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3AWordRep" >WordRep</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3AInt64Rep" >Int64Rep</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3AWord64Rep" >Word64Rep</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3AAddrRep" >AddrRep</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3AFloatRep" >FloatRep</A ></TD ></TR ><TR ><TD CLASS="decl" >| <A HREF="#v%3ADoubleRep" >DoubleRep</A ></TD ></TR ></TABLE ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AtypePrimRep" >typePrimRep</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3APrimRep" >PrimRep</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApredTypeRep" >predTypeRep</A > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3ATvSubstEnv" >TvSubstEnv</A > = <A HREF="VarEnv.html#t%3ATyVarEnv" >TyVarEnv</A > <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3ATvSubst" >TvSubst</A > = <A HREF="#v%3ATvSubst" >TvSubst</A > <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AemptyTvSubstEnv" >emptyTvSubstEnv</A > :: <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AemptyTvSubst" >emptyTvSubst</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkTvSubst" >mkTvSubst</A > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A > -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkOpenTvSubst" >mkOpenTvSubst</A > :: <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A > -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AzipOpenTvSubst" >zipOpenTvSubst</A > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AzipTopTvSubst" >zipTopTvSubst</A > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkTopTvSubst" >mkTopTvSubst</A > :: [(<A HREF="Var.html#t%3ATyVar" >TyVar</A >, <A HREF="Type.html#t%3AType" >Type</A >)] -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AnotElemTvSubst" >notElemTvSubst</A > :: <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgetTvSubstEnv" >getTvSubstEnv</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsetTvSubstEnv" >setTvSubstEnv</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A > -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgetTvInScope" >getTvInScope</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AextendTvInScope" >extendTvInScope</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> [<A HREF="Var.html#t%3AVar" >Var</A >] -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AextendTvSubst" >extendTvSubst</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AextendTvSubstList" >extendTvSubstList</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisInScope" >isInScope</A > :: <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AcomposeTvSubst" >composeTvSubst</A > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A > -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A > -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AzipTyEnv" >zipTyEnv</A > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisEmptyTvSubst" >isEmptyTvSubst</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsubstTy" >substTy</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsubstTys" >substTys</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsubstTyWith" >substTyWith</A > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsubstTysWith" >substTysWith</A > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsubstTheta" >substTheta</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Type.html#t%3AThetaType" >ThetaType</A > -> <A HREF="Type.html#t%3AThetaType" >ThetaType</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsubstPred" >substPred</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3APredType" >PredType</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsubstTyVar" >substTyVar</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsubstTyVars" >substTyVars</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AsubstTyVarBndr" >substTyVarBndr</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> (<A HREF="Type.html#t%3ATvSubst" >TvSubst</A >, <A HREF="Var.html#t%3ATyVar" >TyVar</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AdeShadowTy" >deShadowTy</A > :: <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AlookupTyVar" >lookupTyVar</A > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprType" >pprType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprParendType" >pprParendType</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprTypeApp" >pprTypeApp</A > :: <A HREF="Name.html#t%3ANamedThing" >NamedThing</A > a => a -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprTyThingCategory" >pprTyThingCategory</A > :: <A HREF="Type.html#t%3ATyThing" >TyThing</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprTyThing" >pprTyThing</A > :: <A HREF="Type.html#t%3ATyThing" >TyThing</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprForAll" >pprForAll</A > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprPred" >pprPred</A > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprTheta" >pprTheta</A > :: <A HREF="Type.html#t%3AThetaType" >ThetaType</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprThetaArrow" >pprThetaArrow</A > :: <A HREF="Type.html#t%3AThetaType" >ThetaType</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprClassPred" >pprClassPred</A > :: <A HREF="Class.html#t%3AClass" >Class</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprKind" >pprKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprParendKind" >pprParendKind</A > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprSourceTyCon" >pprSourceTyCon</A > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="1" ><A NAME="1" >Main data types representing Types </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="doc" ><P ><A NAME="type_classification" ><A NAME="type_classification" ></A ></A > </P ><P >Types are one of: </P ><DL ><DT >Unboxed</DT ><DD > Iff its representation is other than a pointer Unboxed types are also unlifted. </DD ><DT >Lifted</DT ><DD > Iff it has bottom as an element. Closures always have lifted types: i.e. any let-bound identifier in Core must have a lifted type. Operationally, a lifted object is one that can be entered. Only lifted types may be unified with a type variable. </DD ><DT >Algebraic</DT ><DD > Iff it is a type with one or more constructors, whether declared with <TT >data</TT > or <TT >newtype</TT >. An algebraic type is one that can be deconstructed with a case expression. This is <EM >not</EM > the same as lifted types, because we also include unboxed tuples in this classification. </DD ><DT >Data</DT ><DD > Iff it is a type declared with <TT >data</TT >, or a boxed tuple. </DD ><DT >Primitive</DT ><DD > Iff it is a built-in type that can't be expressed in Haskell. </DD ></DL ><P >Currently, all primitive types are unlifted, but that's not necessarily the case: for example, <TT >Int</TT > could be primitive. </P ><P >Some primitive types are unboxed, such as <TT >Int#</TT >, whereas some are boxed but unlifted (such as <TT >ByteArray#</TT >). The only primitive types that we classify as algebraic are the unboxed tuples. </P ><P >Some examples of type classifications that may make this a bit clearer are: </P ><PRE > Type primitive boxed lifted algebraic ----------------------------------------------------------------------------- Int# Yes No No No ByteArray# Yes Yes No No (# a, b #) Yes No No Yes ( a, b ) No Yes Yes Yes [a] No Yes Yes Yes </PRE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="doc" ><P >A <EM >source type</EM > is a type that is a separate type as far as the type checker is concerned, but which has a more low-level representation as far as Core-to-Core passes and the rest of the back end is concerned. Notably, <TT >PredTy</TT >s are removed from the representation type while they do exist in the source types. </P ><P >You don't normally have to worry about this, as the utility functions in this module will automatically convert a source into a representation type if they are spotted, to the best of it's abilities. If you don't want this to happen, use the equivalent functions from the <A HREF="TcType.html" >TcType</A > module. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:TyThing" ><A NAME="t%3ATyThing" ></A ></A ><B >TyThing</B > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >A typecheckable-thing, essentially anything that has a name </TD ></TR ><TR ><TD CLASS="section4" >Constructors</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:AnId" ><A NAME="v%3AAnId" ></A ></A ><B >AnId</B > <A HREF="Var.html#t%3AId" >Id</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:ADataCon" ><A NAME="v%3AADataCon" ></A ></A ><B >ADataCon</B > <A HREF="DataCon.html#t%3ADataCon" >DataCon</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:ATyCon" ><A NAME="v%3AATyCon" ></A ></A ><B >ATyCon</B > <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:AClass" ><A NAME="v%3AAClass" ></A ></A ><B >AClass</B > <A HREF="Class.html#t%3AClass" >Class</A ></TD ><TD CLASS="rdoc" ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:TyThing')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:TyThing" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="Outputable.html#t%3AOutputable" >Outputable</A > <A HREF="Type.html#t%3ATyThing" >TyThing</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Name.html#t%3ANamedThing" >NamedThing</A > <A HREF="Type.html#t%3ATyThing" >TyThing</A ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:Type" ><A NAME="t%3AType" ></A ></A ><B >Type</B > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >The key representation of types within the compiler </TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:Type')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:Type" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="Outputable.html#t%3AOutputable" >Outputable</A > <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:PredType" ><A NAME="t%3APredType" ></A ></A ><B >PredType</B > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" ><P >A type of the form <TT >PredTy p</TT > represents a value whose type is the Haskell predicate <TT >p</TT >, where a predicate is what occurs before the <TT >=></TT > in a Haskell type. It can be expanded into its representation, but: </P ><UL ><LI > The type checker must treat it as opaque </LI ><LI > The rest of the compiler treats it as transparent </LI ></UL ><P >Consider these examples: </P ><PRE > f :: (Eq a) => a -> Int g :: (?x :: Int -> Int) => a -> Int h :: (r\l) => {r} => {l::Int | r} </PRE ><P >Here the <TT >Eq a</TT > and <TT >?x :: Int -> Int</TT > and <TT >rl</TT > are all called "predicates" </P ></TD ></TR ><TR ><TD CLASS="section4" >Constructors</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:ClassP" ><A NAME="v%3AClassP" ></A ></A ><B >ClassP</B > <A HREF="Class.html#t%3AClass" >Class</A > [<A HREF="Type.html#t%3AType" >Type</A >]</TD ><TD CLASS="rdoc" >Class predicate e.g. <TT >Eq a</TT > </TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:IParam" ><A NAME="v%3AIParam" ></A ></A ><B >IParam</B > (<A HREF="BasicTypes.html#t%3AIPName" >IPName</A > <A HREF="Name.html#t%3AName" >Name</A >) <A HREF="Type.html#t%3AType" >Type</A ></TD ><TD CLASS="rdoc" >Implicit parameter e.g. <TT >?x :: Int</TT > </TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:EqPred" ><A NAME="v%3AEqPred" ></A ></A ><B >EqPred</B > <A HREF="Type.html#t%3AType" >Type</A > <A HREF="Type.html#t%3AType" >Type</A ></TD ><TD CLASS="rdoc" >Equality predicate e.g <TT >ty1 ~ ty2</TT > </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:PredType')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:PredType" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="../base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > <A HREF="Type.html#t%3APredType" >PredType</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="../base-4.2.0.2/Data-Ord.html#t%3AOrd" >Ord</A > <A HREF="Type.html#t%3APredType" >PredType</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Outputable.html#t%3AOutputable" >Outputable</A > <A HREF="Type.html#t%3APredType" >PredType</A ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:ThetaType" ><A NAME="t%3AThetaType" ></A ></A ><B >ThetaType</B > = [<A HREF="Type.html#t%3APredType" >PredType</A >]</TD ></TR ><TR ><TD CLASS="doc" >A collection of <TT ><A HREF="Type.html#t%3APredType" >PredType</A ></TT >s </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="2" ><A NAME="2" >Constructing and deconstructing types </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkTyVarTy" ><A NAME="v%3AmkTyVarTy" ></A ></A ><B >mkTyVarTy</B > :: <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkTyVarTys" ><A NAME="v%3AmkTyVarTys" ></A ></A ><B >mkTyVarTys</B > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:getTyVar" ><A NAME="v%3AgetTyVar" ></A ></A ><B >getTyVar</B > :: <A HREF="../base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A ></TD ></TR ><TR ><TD CLASS="doc" >Attempts to obtain the type variable underlying a <TT ><A HREF="Type.html#t%3AType" >Type</A ></TT >, and panics with the given message if this is not a type variable type. See also <TT ><A HREF="Type.html#v%3AgetTyVar_maybe" >getTyVar_maybe</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:getTyVar_maybe" ><A NAME="v%3AgetTyVar_maybe" ></A ></A ><B >getTyVar_maybe</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Var.html#t%3ATyVar" >TyVar</A ></TD ></TR ><TR ><TD CLASS="doc" >Attempts to obtain the type variable underlying a <TT ><A HREF="Type.html#t%3AType" >Type</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkAppTy" ><A NAME="v%3AmkAppTy" ></A ></A ><B >mkAppTy</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Applies a type to another, as in e.g. <TT >k a</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkAppTys" ><A NAME="v%3AmkAppTys" ></A ></A ><B >mkAppTys</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitAppTy" ><A NAME="v%3AsplitAppTy" ></A ></A ><B >splitAppTy</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> (<A HREF="Type.html#t%3AType" >Type</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="doc" >Attempts to take a type application apart, as in <TT ><A HREF="Type.html#v%3AsplitAppTy_maybe" >splitAppTy_maybe</A ></TT >, and panics if this is not possible </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitAppTys" ><A NAME="v%3AsplitAppTys" ></A ></A ><B >splitAppTys</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> (<A HREF="Type.html#t%3AType" >Type</A >, [<A HREF="Type.html#t%3AType" >Type</A >])</TD ></TR ><TR ><TD CLASS="doc" >Recursively splits a type as far as is possible, leaving a residual type being applied to and the type arguments applied to it. Never fails, even if that means returning an empty list of type applications. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitAppTy_maybe" ><A NAME="v%3AsplitAppTy_maybe" ></A ></A ><B >splitAppTy_maybe</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > (<A HREF="Type.html#t%3AType" >Type</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="doc" >Attempt to take a type application apart, whether it is a function, type constructor, or plain type application. Note that type family applications are NEVER unsaturated by this! </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:repSplitAppTy_maybe" ><A NAME="v%3ArepSplitAppTy_maybe" ></A ></A ><B >repSplitAppTy_maybe</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > (<A HREF="Type.html#t%3AType" >Type</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="doc" >Does the AppTy split as in <TT ><A HREF="Type.html#v%3AsplitAppTy_maybe" >splitAppTy_maybe</A ></TT >, but assumes that any Core view stuff is already done </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkFunTy" ><A NAME="v%3AmkFunTy" ></A ></A ><B >mkFunTy</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Creates a function type from the given argument and result type </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkFunTys" ><A NAME="v%3AmkFunTys" ></A ></A ><B >mkFunTys</B > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitFunTy" ><A NAME="v%3AsplitFunTy" ></A ></A ><B >splitFunTy</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> (<A HREF="Type.html#t%3AType" >Type</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="doc" >Attempts to extract the argument and result types from a type, and panics if that is not possible. See also <TT ><A HREF="Type.html#v%3AsplitFunTy_maybe" >splitFunTy_maybe</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitFunTy_maybe" ><A NAME="v%3AsplitFunTy_maybe" ></A ></A ><B >splitFunTy_maybe</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > (<A HREF="Type.html#t%3AType" >Type</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="doc" >Attempts to extract the argument and result types from a type </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitFunTys" ><A NAME="v%3AsplitFunTys" ></A ></A ><B >splitFunTys</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> ([<A HREF="Type.html#t%3AType" >Type</A >], <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitFunTysN" ><A NAME="v%3AsplitFunTysN" ></A ></A ><B >splitFunTysN</B > :: <A HREF="../base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> ([<A HREF="Type.html#t%3AType" >Type</A >], <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="doc" >Split off exactly the given number argument types, and panics if that is not possible </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:funResultTy" ><A NAME="v%3AfunResultTy" ></A ></A ><B >funResultTy</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Extract the function result type and panic if that is not possible </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:funArgTy" ><A NAME="v%3AfunArgTy" ></A ></A ><B >funArgTy</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Extract the function argument type and panic if that is not possible </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:zipFunTys" ><A NAME="v%3AzipFunTys" ></A ></A ><B >zipFunTys</B > :: <A HREF="Outputable.html#t%3AOutputable" >Outputable</A > a => [a] -> <A HREF="Type.html#t%3AType" >Type</A > -> ([(a, <A HREF="Type.html#t%3AType" >Type</A >)], <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="doc" >Splits off argument types from the given type and associating them with the things in the input list from left to right. The final result type is returned, along with the resulting pairs of objects and types, albeit with the list of pairs in reverse order. Panics if there are not enough argument types for the input list. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkTyConApp" ><A NAME="v%3AmkTyConApp" ></A ></A ><B >mkTyConApp</B > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >A key function: builds a <TT >TyConApp</TT > or <TT >FunTy</TT > as apppropriate to its arguments. Applies its arguments to the constructor from left to right </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkTyConTy" ><A NAME="v%3AmkTyConTy" ></A ></A ><B >mkTyConTy</B > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Create the plain type constructor type which has been applied to no type arguments at all. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tyConAppTyCon" ><A NAME="v%3AtyConAppTyCon" ></A ></A ><B >tyConAppTyCon</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="doc" >The same as <TT >fst . splitTyConApp</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tyConAppArgs" ><A NAME="v%3AtyConAppArgs" ></A ></A ><B >tyConAppArgs</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="doc" >The same as <TT >snd . splitTyConApp</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitTyConApp_maybe" ><A NAME="v%3AsplitTyConApp_maybe" ></A ></A ><B >splitTyConApp_maybe</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > (<A HREF="TyCon.html#t%3ATyCon" >TyCon</A >, [<A HREF="Type.html#t%3AType" >Type</A >])</TD ></TR ><TR ><TD CLASS="doc" >Attempts to tease a type apart into a type constructor and the application of a number of arguments to that constructor </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitTyConApp" ><A NAME="v%3AsplitTyConApp" ></A ></A ><B >splitTyConApp</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> (<A HREF="TyCon.html#t%3ATyCon" >TyCon</A >, [<A HREF="Type.html#t%3AType" >Type</A >])</TD ></TR ><TR ><TD CLASS="doc" >Attempts to tease a type apart into a type constructor and the application of a number of arguments to that constructor. Panics if that is not possible. See also <TT ><A HREF="Type.html#v%3AsplitTyConApp_maybe" >splitTyConApp_maybe</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkForAllTy" ><A NAME="v%3AmkForAllTy" ></A ></A ><B >mkForAllTy</B > :: <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkForAllTys" ><A NAME="v%3AmkForAllTys" ></A ></A ><B >mkForAllTys</B > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Wraps foralls over the type using the provided <TT ><A HREF="Var.html#t%3ATyVar" >TyVar</A ></TT >s from left to right </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitForAllTy_maybe" ><A NAME="v%3AsplitForAllTy_maybe" ></A ></A ><B >splitForAllTy_maybe</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > (<A HREF="Var.html#t%3ATyVar" >TyVar</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="doc" >Attempts to take a forall type apart, returning the bound type variable and the remainder of the type </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitForAllTys" ><A NAME="v%3AsplitForAllTys" ></A ></A ><B >splitForAllTys</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> ([<A HREF="Var.html#t%3ATyVar" >TyVar</A >], <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="doc" >Attempts to take a forall type apart, returning all the immediate such bound type variables and the remainder of the type. Always suceeds, even if that means returning an empty list of <TT ><A HREF="Var.html#t%3ATyVar" >TyVar</A ></TT >s </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:applyTy" ><A NAME="v%3AapplyTy" ></A ></A ><B >applyTy</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" ><P >Instantiate a forall type with one or more type arguments. Used when we have a polymorphic function applied to type args: </P ><PRE > f t1 t2 </PRE ><P >We use <TT >applyTys type-of-f [t1,t2]</TT > to compute the type of the expression. Panics if no application is possible. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:applyTys" ><A NAME="v%3AapplyTys" ></A ></A ><B >applyTys</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" ><P >This function is interesting because: </P ><P >1. The function may have more for-alls than there are args </P ><P >2. Less obviously, it may have fewer for-alls </P ><P >For case 2. think of: </P ><PRE > applyTys (forall a.a) [forall b.b, Int] </PRE ><P >This really can happen, via dressing up polymorphic types with newtype clothing. Here's an example: </P ><PRE > newtype R = R (forall a. a->a) foo = case undefined :: R of R f -> f () </PRE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:applyTysD" ><A NAME="v%3AapplyTysD" ></A ></A ><B >applyTysD</B > :: <A HREF="Outputable.html#t%3ASDoc" >SDoc</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isForAllTy" ><A NAME="v%3AisForAllTy" ></A ></A ><B >isForAllTy</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:dropForAlls" ><A NAME="v%3AdropForAlls" ></A ></A ><B >dropForAlls</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Equivalent to <TT >snd . splitForAllTys</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:newTyConInstRhs" ><A NAME="v%3AnewTyConInstRhs" ></A ></A ><B >newTyConInstRhs</B > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Unwrap one layer of newtype on a type constructor and its arguments, using an eta-reduced version of the <TT >newtype</TT > if possible </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:carefullySplitNewType_maybe" ><A NAME="v%3AcarefullySplitNewType_maybe" ></A ></A ><B >carefullySplitNewType_maybe</B > :: [<A HREF="TyCon.html#t%3ATyCon" >TyCon</A >] -> <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > ([<A HREF="TyCon.html#t%3ATyCon" >TyCon</A >], <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tyFamInsts" ><A NAME="v%3AtyFamInsts" ></A ></A ><B >tyFamInsts</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> [(<A HREF="TyCon.html#t%3ATyCon" >TyCon</A >, [<A HREF="Type.html#t%3AType" >Type</A >])]</TD ></TR ><TR ><TD CLASS="doc" >Finds type family instances occuring in a type after expanding synonyms. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:predFamInsts" ><A NAME="v%3ApredFamInsts" ></A ></A ><B >predFamInsts</B > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> [(<A HREF="TyCon.html#t%3ATyCon" >TyCon</A >, [<A HREF="Type.html#t%3AType" >Type</A >])]</TD ></TR ><TR ><TD CLASS="doc" >Finds type family instances occuring in a predicate type after expanding synonyms. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkPredTy" ><A NAME="v%3AmkPredTy" ></A ></A ><B >mkPredTy</B > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkPredTys" ><A NAME="v%3AmkPredTys" ></A ></A ><B >mkPredTys</B > :: <A HREF="Type.html#t%3AThetaType" >ThetaType</A > -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkFamilyTyConApp" ><A NAME="v%3AmkFamilyTyConApp" ></A ></A ><B >mkFamilyTyConApp</B > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" ><P >Given a family instance TyCon and its arg types, return the corresponding family type. E.g: </P ><PRE > data family T a data instance T (Maybe b) = MkT b </PRE ><P >Where the instance tycon is :RTL, so: </P ><PRE > mkFamilyTyConApp :RTL Int = T (Maybe Int) </PRE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="3" ><A NAME="3" >Common type constructors </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:funTyCon" ><A NAME="v%3AfunTyCon" ></A ></A ><B >funTyCon</B > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="4" ><A NAME="4" >Predicates on types </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isTyVarTy" ><A NAME="v%3AisTyVarTy" ></A ></A ><B >isTyVarTy</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isFunTy" ><A NAME="v%3AisFunTy" ></A ></A ><B >isFunTy</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isUnLiftedType" ><A NAME="v%3AisUnLiftedType" ></A ></A ><B >isUnLiftedType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >See <A HREF="Type.html#type_classification" >Type</A > for what an unlifted type is </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isUnboxedTupleType" ><A NAME="v%3AisUnboxedTupleType" ></A ></A ><B >isUnboxedTupleType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isAlgType" ><A NAME="v%3AisAlgType" ></A ></A ><B >isAlgType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >See <A HREF="Type.html#type_classification" >Type</A > for what an algebraic type is. Should only be applied to <EM >types</EM >, as opposed to e.g. partially saturated type constructors </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isClosedAlgType" ><A NAME="v%3AisClosedAlgType" ></A ></A ><B >isClosedAlgType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >See <A HREF="Type.html#type_classification" >Type</A > for what an algebraic type is. Should only be applied to <EM >types</EM >, as opposed to e.g. partially saturated type constructors. Closed type constructors are those with a fixed right hand side, as opposed to e.g. associated types </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isPrimitiveType" ><A NAME="v%3AisPrimitiveType" ></A ></A ><B >isPrimitiveType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >Returns true of types that are opaque to Haskell. Most of these are unlifted, but now that we interact with .NET, we may have primtive (foreign-imported) types that are lifted </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isStrictType" ><A NAME="v%3AisStrictType" ></A ></A ><B >isStrictType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >Computes whether an argument (or let right hand side) should be computed strictly or lazily, based only on its type. Works just like <TT ><A HREF="Type.html#v%3AisUnLiftedType" >isUnLiftedType</A ></TT >, except that it has a special case for dictionaries (i.e. does not work purely on representation types) </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isStrictPred" ><A NAME="v%3AisStrictPred" ></A ></A ><B >isStrictPred</B > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" ><P >We may be strict in dictionary types, but only if it has more than one component. </P ><P >(Being strict in a single-component dictionary risks poking the dictionary component, which is wrong.) </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="5" ><A NAME="5" >Main data types representing Kinds </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="doc" ><P ><A NAME="kind_subtyping" ><A NAME="kind_subtyping" ></A ></A > There's a little subtyping at the kind level: </P ><PRE > ? / \ / \ ?? (#) / \ * # . Where: * [LiftedTypeKind] means boxed type # [UnliftedTypeKind] means unboxed type (#) [UbxTupleKind] means unboxed tuple ?? [ArgTypeKind] is the lub of {*, #} ? [OpenTypeKind] means any type at all </PRE ><P >In particular: </P ><PRE > error :: forall a:?. String -> a (->) :: ?? -> ? -> \* (\\(x::t) -> ...) </PRE ><P >Where in the last example <TT >t :: ??</TT > (i.e. is not an unboxed tuple) </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:Kind" ><A NAME="t%3AKind" ></A ></A ><B >Kind</B > = <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" ><P >The key type representing kinds in the compiler. Invariant: a kind is always in one of these forms: </P ><PRE > FunTy k1 k2 TyConApp PrimTyCon [...] TyVar kv -- (during inference only) ForAll ... -- (for top-level coercions) </PRE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:SimpleKind" ><A NAME="t%3ASimpleKind" ></A ></A ><B >SimpleKind</B > = <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:KindVar" ><A NAME="t%3AKindVar" ></A ></A ><B >KindVar</B > = <A HREF="Var.html#t%3ATyVar" >TyVar</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="6" ><A NAME="6" >Deconstructing Kinds </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:kindFunResult" ><A NAME="v%3AkindFunResult" ></A ></A ><B >kindFunResult</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="doc" >Essentially <TT ><A HREF="Type.html#v%3AfunResultTy" >funResultTy</A ></TT > on kinds </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitKindFunTys" ><A NAME="v%3AsplitKindFunTys" ></A ></A ><B >splitKindFunTys</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> ([<A HREF="Type.html#t%3AKind" >Kind</A >], <A HREF="Type.html#t%3AKind" >Kind</A >)</TD ></TR ><TR ><TD CLASS="doc" >Essentially <TT ><A HREF="Type.html#v%3AsplitFunTys" >splitFunTys</A ></TT > on kinds </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:splitKindFunTysN" ><A NAME="v%3AsplitKindFunTysN" ></A ></A ><B >splitKindFunTysN</B > :: <A HREF="../base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A > -> <A HREF="Type.html#t%3AKind" >Kind</A > -> ([<A HREF="Type.html#t%3AKind" >Kind</A >], <A HREF="Type.html#t%3AKind" >Kind</A >)</TD ></TR ><TR ><TD CLASS="doc" >Essentially <TT ><A HREF="Type.html#v%3AsplitFunTysN" >splitFunTysN</A ></TT > on kinds </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="7" ><A NAME="7" >Common Kinds and SuperKinds </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:liftedTypeKind" ><A NAME="v%3AliftedTypeKind" ></A ></A ><B >liftedTypeKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:unliftedTypeKind" ><A NAME="v%3AunliftedTypeKind" ></A ></A ><B >unliftedTypeKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="doc" >See <A HREF="Type.html#kind_subtyping" >Type</A > for details of the distinction between these <TT ><A HREF="Type.html#t%3AKind" >Kind</A ></TT >s </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:openTypeKind" ><A NAME="v%3AopenTypeKind" ></A ></A ><B >openTypeKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:argTypeKind" ><A NAME="v%3AargTypeKind" ></A ></A ><B >argTypeKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:ubxTupleKind" ><A NAME="v%3AubxTupleKind" ></A ></A ><B >ubxTupleKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tySuperKind" ><A NAME="v%3AtySuperKind" ></A ></A ><B >tySuperKind</B > :: SuperKind</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:coSuperKind" ><A NAME="v%3AcoSuperKind" ></A ></A ><B >coSuperKind</B > :: SuperKind</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="8" ><A NAME="8" >Common Kind type constructors </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:liftedTypeKindTyCon" ><A NAME="v%3AliftedTypeKindTyCon" ></A ></A ><B >liftedTypeKindTyCon</B > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:openTypeKindTyCon" ><A NAME="v%3AopenTypeKindTyCon" ></A ></A ><B >openTypeKindTyCon</B > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:unliftedTypeKindTyCon" ><A NAME="v%3AunliftedTypeKindTyCon" ></A ></A ><B >unliftedTypeKindTyCon</B > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:argTypeKindTyCon" ><A NAME="v%3AargTypeKindTyCon" ></A ></A ><B >argTypeKindTyCon</B > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:ubxTupleKindTyCon" ><A NAME="v%3AubxTupleKindTyCon" ></A ></A ><B >ubxTupleKindTyCon</B > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="9" ><A NAME="9" >Predicates on Kinds </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isLiftedTypeKind" ><A NAME="v%3AisLiftedTypeKind" ></A ></A ><B >isLiftedTypeKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isUnliftedTypeKind" ><A NAME="v%3AisUnliftedTypeKind" ></A ></A ><B >isUnliftedTypeKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isOpenTypeKind" ><A NAME="v%3AisOpenTypeKind" ></A ></A ><B >isOpenTypeKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >See <A HREF="Type.html#kind_subtyping" >Type</A > for details of the distinction between these <TT ><A HREF="Type.html#t%3AKind" >Kind</A ></TT >s </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isUbxTupleKind" ><A NAME="v%3AisUbxTupleKind" ></A ></A ><B >isUbxTupleKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isArgTypeKind" ><A NAME="v%3AisArgTypeKind" ></A ></A ><B >isArgTypeKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isKind" ><A NAME="v%3AisKind" ></A ></A ><B >isKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >Is this a kind (i.e. a type-of-types)? </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isTySuperKind" ><A NAME="v%3AisTySuperKind" ></A ></A ><B >isTySuperKind</B > :: SuperKind -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isCoSuperKind" ><A NAME="v%3AisCoSuperKind" ></A ></A ><B >isCoSuperKind</B > :: SuperKind -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isSuperKind" ><A NAME="v%3AisSuperKind" ></A ></A ><B >isSuperKind</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >Is this a super-kind (i.e. a type-of-kinds)? </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isCoercionKind" ><A NAME="v%3AisCoercionKind" ></A ></A ><B >isCoercionKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isEqPred" ><A NAME="v%3AisEqPred" ></A ></A ><B >isEqPred</B > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkArrowKind" ><A NAME="v%3AmkArrowKind" ></A ></A ><B >mkArrowKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="doc" >Given two kinds <TT >k1</TT > and <TT >k2</TT >, creates the <TT ><A HREF="Type.html#t%3AKind" >Kind</A ></TT > <TT >k1 -> k2</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkArrowKinds" ><A NAME="v%3AmkArrowKinds" ></A ></A ><B >mkArrowKinds</B > :: [<A HREF="Type.html#t%3AKind" >Kind</A >] -> <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="doc" >Iterated application of <TT ><A HREF="Type.html#v%3AmkArrowKind" >mkArrowKind</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isSubArgTypeKind" ><A NAME="v%3AisSubArgTypeKind" ></A ></A ><B >isSubArgTypeKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >True of any sub-kind of ArgTypeKind </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isSubOpenTypeKind" ><A NAME="v%3AisSubOpenTypeKind" ></A ></A ><B >isSubOpenTypeKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >True of any sub-kind of OpenTypeKind (i.e. anything except arrow) </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isSubKind" ><A NAME="v%3AisSubKind" ></A ></A ><B >isSubKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" ><TT >k1 `isSubKind` k2</TT > checks that <TT >k1</TT > <: <TT >k2</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:defaultKind" ><A NAME="v%3AdefaultKind" ></A ></A ><B >defaultKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="doc" >Used when generalising: default kind ? and ?? to *. See <A HREF="Type.html#kind_subtyping" >Type</A > for more information on what that means </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:eqKind" ><A NAME="v%3AeqKind" ></A ></A ><B >eqKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isSubKindCon" ><A NAME="v%3AisSubKindCon" ></A ></A ><B >isSubKindCon</B > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" ><TT >kc1 `isSubKindCon` kc2</TT > checks that <TT >kc1</TT > <: <TT >kc2</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="10" ><A NAME="10" >Type free variables </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tyVarsOfType" ><A NAME="v%3AtyVarsOfType" ></A ></A ><B >tyVarsOfType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TD ></TR ><TR ><TD CLASS="doc" >NB: for type synonyms tyVarsOfType does <EM >not</EM > expand the synonym </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tyVarsOfTypes" ><A NAME="v%3AtyVarsOfTypes" ></A ></A ><B >tyVarsOfTypes</B > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tyVarsOfPred" ><A NAME="v%3AtyVarsOfPred" ></A ></A ><B >tyVarsOfPred</B > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tyVarsOfTheta" ><A NAME="v%3AtyVarsOfTheta" ></A ></A ><B >tyVarsOfTheta</B > :: <A HREF="Type.html#t%3AThetaType" >ThetaType</A > -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:typeKind" ><A NAME="v%3AtypeKind" ></A ></A ><B >typeKind</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:expandTypeSynonyms" ><A NAME="v%3AexpandTypeSynonyms" ></A ></A ><B >expandTypeSynonyms</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Expand out all type synonyms. Actually, it'd suffice to expand out just the ones that discard type variables (e.g. type Funny a = Int) But we don't know which those are currently, so we just expand all. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="11" ><A NAME="11" >Tidying type related things up for printing </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tidyType" ><A NAME="v%3AtidyType" ></A ></A ><B >tidyType</B > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tidyTypes" ><A NAME="v%3AtidyTypes" ></A ></A ><B >tidyTypes</B > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tidyOpenType" ><A NAME="v%3AtidyOpenType" ></A ></A ><B >tidyOpenType</B > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> (<A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A >, <A HREF="Type.html#t%3AType" >Type</A >)</TD ></TR ><TR ><TD CLASS="doc" >Grabs the free type variables, tidies them and then uses <TT ><A HREF="Type.html#v%3AtidyType" >tidyType</A ></TT > to work over the type itself </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tidyOpenTypes" ><A NAME="v%3AtidyOpenTypes" ></A ></A ><B >tidyOpenTypes</B > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> (<A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A >, [<A HREF="Type.html#t%3AType" >Type</A >])</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tidyTyVarBndr" ><A NAME="v%3AtidyTyVarBndr" ></A ></A ><B >tidyTyVarBndr</B > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> (<A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A >, <A HREF="Var.html#t%3ATyVar" >TyVar</A >)</TD ></TR ><TR ><TD CLASS="doc" ><P >This tidies up a type for printing in an error message, or in an interface file. </P ><P >It doesn't change the uniques at all, just the print names. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tidyFreeTyVars" ><A NAME="v%3AtidyFreeTyVars" ></A ></A ><B >tidyFreeTyVars</B > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A > -> <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A ></TD ></TR ><TR ><TD CLASS="doc" >Add the free <TT ><A HREF="Var.html#t%3ATyVar" >TyVar</A ></TT >s to the env in tidy form, so that we can tidy the type they are free in </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tidyOpenTyVar" ><A NAME="v%3AtidyOpenTyVar" ></A ></A ><B >tidyOpenTyVar</B > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> (<A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A >, <A HREF="Var.html#t%3ATyVar" >TyVar</A >)</TD ></TR ><TR ><TD CLASS="doc" >Treat a new <TT ><A HREF="Var.html#t%3ATyVar" >TyVar</A ></TT > as a binder, and give it a fresh tidy name using the environment if one has not already been allocated. See also <TT ><A HREF="Type.html#v%3AtidyTyVarBndr" >tidyTyVarBndr</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tidyOpenTyVars" ><A NAME="v%3AtidyOpenTyVars" ></A ></A ><B >tidyOpenTyVars</B > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> (<A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A >, [<A HREF="Var.html#t%3ATyVar" >TyVar</A >])</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tidyTopType" ><A NAME="v%3AtidyTopType" ></A ></A ><B >tidyTopType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Calls <TT ><A HREF="Type.html#v%3AtidyType" >tidyType</A ></TT > on a top-level type (i.e. with an empty tidying environment) </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tidyPred" ><A NAME="v%3AtidyPred" ></A ></A ><B >tidyPred</B > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3APredType" >PredType</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tidyKind" ><A NAME="v%3AtidyKind" ></A ></A ><B >tidyKind</B > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A > -> <A HREF="Type.html#t%3AKind" >Kind</A > -> (<A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A >, <A HREF="Type.html#t%3AKind" >Kind</A >)</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="12" ><A NAME="12" >Type comparison </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:coreEqType" ><A NAME="v%3AcoreEqType" ></A ></A ><B >coreEqType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >Type equality test for Core types (i.e. ignores predicate-types, synonyms etc.) </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tcEqType" ><A NAME="v%3AtcEqType" ></A ></A ><B >tcEqType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >Type equality on source types. Does not look through <TT >newtypes</TT > or <TT ><A HREF="Type.html#t%3APredType" >PredType</A ></TT >s, but it does look through type synonyms. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tcEqTypes" ><A NAME="v%3AtcEqTypes" ></A ></A ><B >tcEqTypes</B > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tcCmpType" ><A NAME="v%3AtcCmpType" ></A ></A ><B >tcCmpType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Ord.html#t%3AOrdering" >Ordering</A ></TD ></TR ><TR ><TD CLASS="doc" >Type ordering on source types. Does not look through <TT >newtypes</TT > or <TT ><A HREF="Type.html#t%3APredType" >PredType</A ></TT >s, but it does look through type synonyms. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tcCmpTypes" ><A NAME="v%3AtcCmpTypes" ></A ></A ><B >tcCmpTypes</B > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="../base-4.2.0.2/Data-Ord.html#t%3AOrdering" >Ordering</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tcEqPred" ><A NAME="v%3AtcEqPred" ></A ></A ><B >tcEqPred</B > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tcEqPredX" ><A NAME="v%3AtcEqPredX" ></A ></A ><B >tcEqPredX</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tcCmpPred" ><A NAME="v%3AtcCmpPred" ></A ></A ><B >tcCmpPred</B > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="../base-4.2.0.2/Data-Ord.html#t%3AOrdering" >Ordering</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tcEqTypeX" ><A NAME="v%3AtcEqTypeX" ></A ></A ><B >tcEqTypeX</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tcPartOfType" ><A NAME="v%3AtcPartOfType" ></A ></A ><B >tcPartOfType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >Checks whether the second argument is a subterm of the first. (We don't care about binders, as we are only interested in syntactic subterms.) </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tcPartOfPred" ><A NAME="v%3AtcPartOfPred" ></A ></A ><B >tcPartOfPred</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="13" ><A NAME="13" >Forcing evaluation of types </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:seqType" ><A NAME="v%3AseqType" ></A ></A ><B >seqType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29" >()</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:seqTypes" ><A NAME="v%3AseqTypes" ></A ></A ><B >seqTypes</B > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="../ghc-prim-0.2.0.0/GHC-Unit.html#t%3A%28%29" >()</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="14" ><A NAME="14" >Other views onto Types </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:coreView" ><A NAME="v%3AcoreView" ></A ></A ><B >coreView</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" ><P >In Core, we "look through" non-recursive newtypes and PredTypes: this function tries to obtain a different view of the supplied type given this </P ><P >Strips off the <EM >top layer only</EM > of a type to give its underlying representation type. Returns Nothing if there is nothing to look through. </P ><P >In the case of <TT >newtype</TT >s, it returns one of: </P ><P >1) A vanilla <TT >TyConApp</TT > (recursive newtype, or non-saturated) </P ><P >2) The newtype representation (otherwise), meaning the type written in the RHS of the newtype declaration, which may itself be a newtype </P ><P >For example, with: </P ><PRE > newtype R = MkR S newtype S = MkS T newtype T = MkT (T -> T) </PRE ><P >expandNewTcApp on: </P ><UL ><LI > <TT >R</TT > gives <TT >Just S</TT > * <TT >S</TT > gives <TT >Just T</TT > * <TT >T</TT > gives <TT >Nothing</TT > (no expansion) </LI ></UL ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:tcView" ><A NAME="v%3AtcView" ></A ></A ><B >tcView</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Similar to <TT ><A HREF="Type.html#v%3AcoreView" >coreView</A ></TT >, but for the type checker, which just looks through synonyms </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:kindView" ><A NAME="v%3AkindView" ></A ></A ><B >kindView</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Type.html#t%3AKind" >Kind</A ></TD ></TR ><TR ><TD CLASS="doc" >Similar to <TT ><A HREF="Type.html#v%3AcoreView" >coreView</A ></TT > or <TT ><A HREF="Type.html#v%3AtcView" >tcView</A ></TT >, but works on <TT ><A HREF="Type.html#t%3AKind" >Kind</A ></TT >s </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:repType" ><A NAME="v%3ArepType" ></A ></A ><B >repType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" ><P >Looks through: </P ><P >1. For-alls 2. Synonyms 3. Predicates 4. All newtypes, including recursive ones, but not newtype families </P ><P >It's useful in the back end of the compiler. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="15" ><A NAME="15" >Type representation for the code generator </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:PrimRep" ><A NAME="t%3APrimRep" ></A ></A ><B >PrimRep</B > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >A <TT ><A HREF="Type.html#t%3APrimRep" >PrimRep</A ></TT > is an abstraction of a type. It contains information that the code generator needs in order to pass arguments, return results, and store values of this type. </TD ></TR ><TR ><TD CLASS="section4" >Constructors</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:VoidRep" ><A NAME="v%3AVoidRep" ></A ></A ><B >VoidRep</B ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:PtrRep" ><A NAME="v%3APtrRep" ></A ></A ><B >PtrRep</B ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:IntRep" ><A NAME="v%3AIntRep" ></A ></A ><B >IntRep</B ></TD ><TD CLASS="rdoc" >Signed, word-sized value </TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:WordRep" ><A NAME="v%3AWordRep" ></A ></A ><B >WordRep</B ></TD ><TD CLASS="rdoc" >Unsigned, word-sized value </TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:Int64Rep" ><A NAME="v%3AInt64Rep" ></A ></A ><B >Int64Rep</B ></TD ><TD CLASS="rdoc" >Signed, 64 bit value (with 32-bit words only) </TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:Word64Rep" ><A NAME="v%3AWord64Rep" ></A ></A ><B >Word64Rep</B ></TD ><TD CLASS="rdoc" >Unsigned, 64 bit value (with 32-bit words only) </TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:AddrRep" ><A NAME="v%3AAddrRep" ></A ></A ><B >AddrRep</B ></TD ><TD CLASS="rdoc" >A pointer, but <EM >not</EM > to a Haskell value (use <TT ><A HREF="Type.html#v%3APtrRep" >PtrRep</A ></TT >) </TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:FloatRep" ><A NAME="v%3AFloatRep" ></A ></A ><B >FloatRep</B ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" ><A NAME="v:DoubleRep" ><A NAME="v%3ADoubleRep" ></A ></A ><B >DoubleRep</B ></TD ><TD CLASS="rdoc" ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:PrimRep')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:PrimRep" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="../base-4.2.0.2/Data-Eq.html#t%3AEq" >Eq</A > <A HREF="Type.html#t%3APrimRep" >PrimRep</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="../base-4.2.0.2/Text-Show.html#t%3AShow" >Show</A > <A HREF="Type.html#t%3APrimRep" >PrimRep</A ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="Outputable.html#t%3AOutputable" >Outputable</A > <A HREF="Type.html#t%3APrimRep" >PrimRep</A ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:typePrimRep" ><A NAME="v%3AtypePrimRep" ></A ></A ><B >typePrimRep</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3APrimRep" >PrimRep</A ></TD ></TR ><TR ><TD CLASS="doc" >Discovers the primitive representation of a more abstract <TT ><A HREF="Type.html#t%3AType" >Type</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:predTypeRep" ><A NAME="v%3ApredTypeRep" ></A ></A ><B >predTypeRep</B > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Convert a <TT ><A HREF="Type.html#t%3APredType" >PredType</A ></TT > to its representation type. However, it unwraps only the outermost level; for example, the result might be a newtype application </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="16" ><A NAME="16" >Main type substitution data types </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:TvSubstEnv" ><A NAME="t%3ATvSubstEnv" ></A ></A ><B >TvSubstEnv</B > = <A HREF="VarEnv.html#t%3ATyVarEnv" >TyVarEnv</A > <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >A substitition of <TT ><A HREF="Type.html#t%3AType" >Type</A ></TT >s for <TT ><A HREF="Var.html#t%3ATyVar" >TyVar</A ></TT >s </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:TvSubst" ><A NAME="t%3ATvSubst" ></A ></A ><B >TvSubst</B > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" ><P >Type substitution </P ><P ><A NAME="tvsubst_invariant" ><A NAME="tvsubst_invariant" ></A ></A > The following invariants must hold of a <TT ><A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TT >: </P ><P >1. The in-scope set is needed <EM >only</EM > to guide the generation of fresh uniques </P ><P >2. In particular, the <EM >kind</EM > of the type variables in the in-scope set is not relevant </P ><P >3. The substition is only applied ONCE! This is because in general such application will not reached a fixed point. </P ></TD ></TR ><TR ><TD CLASS="section4" >Constructors</TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="arg" ><A NAME="v:TvSubst" ><A NAME="v%3ATvSubst" ></A ></A ><B >TvSubst</B > <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A ></TD ><TD CLASS="rdoc" ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:TvSubst')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:TvSubst" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="Outputable.html#t%3AOutputable" >Outputable</A > <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="17" ><A NAME="17" >Manipulating type substitutions </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:emptyTvSubstEnv" ><A NAME="v%3AemptyTvSubstEnv" ></A ></A ><B >emptyTvSubstEnv</B > :: <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:emptyTvSubst" ><A NAME="v%3AemptyTvSubst" ></A ></A ><B >emptyTvSubst</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkTvSubst" ><A NAME="v%3AmkTvSubst" ></A ></A ><B >mkTvSubst</B > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A > -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkOpenTvSubst" ><A NAME="v%3AmkOpenTvSubst" ></A ></A ><B >mkOpenTvSubst</B > :: <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A > -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="doc" >Generates the in-scope set for the <TT ><A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TT > from the types in the incoming environment, hence <A HREF="open.html" >open</A > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:zipOpenTvSubst" ><A NAME="v%3AzipOpenTvSubst" ></A ></A ><B >zipOpenTvSubst</B > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="doc" >Generates the in-scope set for the <TT ><A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TT > from the types in the incoming environment, hence <A HREF="open.html" >open</A > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:zipTopTvSubst" ><A NAME="v%3AzipTopTvSubst" ></A ></A ><B >zipTopTvSubst</B > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkTopTvSubst" ><A NAME="v%3AmkTopTvSubst" ></A ></A ><B >mkTopTvSubst</B > :: [(<A HREF="Var.html#t%3ATyVar" >TyVar</A >, <A HREF="Type.html#t%3AType" >Type</A >)] -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="doc" >Called when doing top-level substitutions. Here we expect that the free vars of the range of the substitution will be empty. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:notElemTvSubst" ><A NAME="v%3AnotElemTvSubst" ></A ></A ><B >notElemTvSubst</B > :: <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:getTvSubstEnv" ><A NAME="v%3AgetTvSubstEnv" ></A ></A ><B >getTvSubstEnv</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:setTvSubstEnv" ><A NAME="v%3AsetTvSubstEnv" ></A ></A ><B >setTvSubstEnv</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A > -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:getTvInScope" ><A NAME="v%3AgetTvInScope" ></A ></A ><B >getTvInScope</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:extendTvInScope" ><A NAME="v%3AextendTvInScope" ></A ></A ><B >extendTvInScope</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> [<A HREF="Var.html#t%3AVar" >Var</A >] -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:extendTvSubst" ><A NAME="v%3AextendTvSubst" ></A ></A ><B >extendTvSubst</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:extendTvSubstList" ><A NAME="v%3AextendTvSubstList" ></A ></A ><B >extendTvSubstList</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isInScope" ><A NAME="v%3AisInScope" ></A ></A ><B >isInScope</B > :: <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:composeTvSubst" ><A NAME="v%3AcomposeTvSubst" ></A ></A ><B >composeTvSubst</B > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A > -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A > -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A ></TD ></TR ><TR ><TD CLASS="doc" ><TT >(compose env1 env2)(x)</TT > is <TT >env1(env2(x))</TT >; i.e. apply <TT >env2</TT > then <TT >env1</TT >. It assumes that both are idempotent. Typically, <TT >env1</TT > is the refinement to a base substitution <TT >env2</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:zipTyEnv" ><A NAME="v%3AzipTyEnv" ></A ></A ><B >zipTyEnv</B > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3ATvSubstEnv" >TvSubstEnv</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isEmptyTvSubst" ><A NAME="v%3AisEmptyTvSubst" ></A ></A ><B >isEmptyTvSubst</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="18" ><A NAME="18" >Performing substitution on types </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:substTy" ><A NAME="v%3AsubstTy" ></A ></A ><B >substTy</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Substitute within a <TT ><A HREF="Type.html#t%3AType" >Type</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:substTys" ><A NAME="v%3AsubstTys" ></A ></A ><B >substTys</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="doc" >Substitute within several <TT ><A HREF="Type.html#t%3AType" >Type</A ></TT >s </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:substTyWith" ><A NAME="v%3AsubstTyWith" ></A ></A ><B >substTyWith</B > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Type substitution making use of an <TT ><A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TT > that is assumed to be open, see <TT ><A HREF="Type.html#v%3AzipOpenTvSubst" >zipOpenTvSubst</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:substTysWith" ><A NAME="v%3AsubstTysWith" ></A ></A ><B >substTysWith</B > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="doc" >Type substitution making use of an <TT ><A HREF="Type.html#t%3ATvSubst" >TvSubst</A ></TT > that is assumed to be open, see <TT ><A HREF="Type.html#v%3AzipOpenTvSubst" >zipOpenTvSubst</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:substTheta" ><A NAME="v%3AsubstTheta" ></A ></A ><B >substTheta</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Type.html#t%3AThetaType" >ThetaType</A > -> <A HREF="Type.html#t%3AThetaType" >ThetaType</A ></TD ></TR ><TR ><TD CLASS="doc" >Substitute within a <TT ><A HREF="Type.html#t%3AThetaType" >ThetaType</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:substPred" ><A NAME="v%3AsubstPred" ></A ></A ><B >substPred</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Type.html#t%3APredType" >PredType</A ></TD ></TR ><TR ><TD CLASS="doc" >Substitute within a <TT ><A HREF="Type.html#t%3APredType" >PredType</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:substTyVar" ><A NAME="v%3AsubstTyVar" ></A ></A ><B >substTyVar</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:substTyVars" ><A NAME="v%3AsubstTyVars" ></A ></A ><B >substTyVars</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> [<A HREF="Type.html#t%3AType" >Type</A >]</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:substTyVarBndr" ><A NAME="v%3AsubstTyVarBndr" ></A ></A ><B >substTyVarBndr</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> (<A HREF="Type.html#t%3ATvSubst" >TvSubst</A >, <A HREF="Var.html#t%3ATyVar" >TyVar</A >)</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:deShadowTy" ><A NAME="v%3AdeShadowTy" ></A ></A ><B >deShadowTy</B > :: <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="doc" >Remove any nested binders mentioning the <TT ><A HREF="Var.html#t%3ATyVar" >TyVar</A ></TT >s in the <TT ><A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:lookupTyVar" ><A NAME="v%3AlookupTyVar" ></A ></A ><B >lookupTyVar</B > :: <A HREF="Type.html#t%3ATvSubst" >TvSubst</A > -> <A HREF="Var.html#t%3ATyVar" >TyVar</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="19" ><A NAME="19" >Pretty-printing </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprType" ><A NAME="v%3ApprType" ></A ></A ><B >pprType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprParendType" ><A NAME="v%3ApprParendType" ></A ></A ><B >pprParendType</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprTypeApp" ><A NAME="v%3ApprTypeApp" ></A ></A ><B >pprTypeApp</B > :: <A HREF="Name.html#t%3ANamedThing" >NamedThing</A > a => a -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprTyThingCategory" ><A NAME="v%3ApprTyThingCategory" ></A ></A ><B >pprTyThingCategory</B > :: <A HREF="Type.html#t%3ATyThing" >TyThing</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprTyThing" ><A NAME="v%3ApprTyThing" ></A ></A ><B >pprTyThing</B > :: <A HREF="Type.html#t%3ATyThing" >TyThing</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprForAll" ><A NAME="v%3ApprForAll" ></A ></A ><B >pprForAll</B > :: [<A HREF="Var.html#t%3ATyVar" >TyVar</A >] -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprPred" ><A NAME="v%3ApprPred" ></A ></A ><B >pprPred</B > :: <A HREF="Type.html#t%3APredType" >PredType</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprTheta" ><A NAME="v%3ApprTheta" ></A ></A ><B >pprTheta</B > :: <A HREF="Type.html#t%3AThetaType" >ThetaType</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprThetaArrow" ><A NAME="v%3ApprThetaArrow" ></A ></A ><B >pprThetaArrow</B > :: <A HREF="Type.html#t%3AThetaType" >ThetaType</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprClassPred" ><A NAME="v%3ApprClassPred" ></A ></A ><B >pprClassPred</B > :: <A HREF="Class.html#t%3AClass" >Class</A > -> [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprKind" ><A NAME="v%3ApprKind" ></A ></A ><B >pprKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprParendKind" ><A NAME="v%3ApprParendKind" ></A ></A ><B >pprParendKind</B > :: <A HREF="Type.html#t%3AKind" >Kind</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprSourceTyCon" ><A NAME="v%3ApprSourceTyCon" ></A ></A ><B >pprSourceTyCon</B > :: <A HREF="TyCon.html#t%3ATyCon" >TyCon</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="doc" ><P >Pretty prints a <TT ><A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TT >, using the family instance in case of a representation tycon. For example: </P ><PRE > data T [a] = ... </PRE ><P >In that case we want to print <TT >T [a]</TT >, where <TT >T</TT > is the family <TT ><A HREF="TyCon.html#t%3ATyCon" >TyCon</A ></TT > </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="botbar" >Produced by <A HREF="http://www.haskell.org/haddock/" >Haddock</A > version 2.6.1</TD ></TR ></TABLE ></BODY ></HTML >