Sophie

Sophie

distrib > Mandriva > 2010.0 > i586 > media > contrib-release > by-pkgid > 1f2b142b9d2ef4849a6f5316fa1c5b12 > files > 2082

ghc-6.10.4-1mdv2010.0.i586.rpm

<!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.10.4: 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
> -&gt; <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
>] -&gt; [<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/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; <A HREF="../base/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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; (<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
> -&gt; (<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
> -&gt; <A HREF="../base/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
> -&gt; <A HREF="../base/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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
>] -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; (<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
> -&gt; <A HREF="../base/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
> -&gt; ([<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="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; ([<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
> -&gt; <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
> -&gt; <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 =&gt; [a] -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; ([(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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <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
> -&gt; <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
> -&gt; [<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
> -&gt; <A HREF="../base/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
> -&gt; (<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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
>] -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; <A HREF="../base/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
> -&gt; ([<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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
>] -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <A HREF="../base/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
> -&gt; [(<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
> -&gt; [(<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
> -&gt; <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
> -&gt; [<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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <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
> -&gt; ([<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="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; ([<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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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 -&gt; <A HREF="../ghc-prim/GHC-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 -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <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
>] -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <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
>] -&gt; <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
> -&gt; <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
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; [<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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; (<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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; (<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
> -&gt; <A HREF="Var.html#t%3ATyVar"
>TyVar</A
> -&gt; (<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
> -&gt; <A HREF="VarSet.html#t%3ATyVarSet"
>TyVarSet</A
> -&gt; <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
> -&gt; <A HREF="Var.html#t%3ATyVar"
>TyVar</A
> -&gt; (<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
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; (<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
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; (<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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <A HREF="../ghc-prim/GHC-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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <A HREF="../ghc-prim/GHC-Ordering.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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <A HREF="../ghc-prim/GHC-Ordering.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
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <A HREF="../ghc-prim/GHC-Ordering.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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/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
>] -&gt; <A HREF="../ghc-prim/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
> -&gt; <A HREF="../base/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
> -&gt; <A HREF="../base/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
> -&gt; <A HREF="../base/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
> -&gt; <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
> -&gt; <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
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3ATvSubstEnv"
>TvSubstEnv</A
> -&gt; <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
> -&gt; <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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
>)] -&gt; <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
> -&gt; <A HREF="Type.html#t%3ATvSubst"
>TvSubst</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3ATvSubstEnv"
>TvSubstEnv</A
> -&gt; <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
> -&gt; <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
> -&gt; [<A HREF="Var.html#t%3AVar"
>Var</A
>] -&gt; <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
> -&gt; <A HREF="Var.html#t%3ATyVar"
>TyVar</A
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <A HREF="Type.html#t%3ATvSubst"
>TvSubst</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3ATvSubstEnv"
>TvSubstEnv</A
> -&gt; <A HREF="Type.html#t%3ATvSubstEnv"
>TvSubstEnv</A
> -&gt; <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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; [<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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; [<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
> -&gt; <A HREF="Type.html#t%3AThetaType"
>ThetaType</A
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <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
> -&gt; <A HREF="Var.html#t%3ATyVar"
>TyVar</A
> -&gt; <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
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; [<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
> -&gt; <A HREF="Var.html#t%3ATyVar"
>TyVar</A
> -&gt; (<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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; <A HREF="Var.html#t%3ATyVar"
>TyVar</A
> -&gt; <A HREF="../base/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
> -&gt; <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
> -&gt; <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 =&gt; a -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <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
> -&gt; <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
>] -&gt; <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
> -&gt; <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
> -&gt; <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
> -&gt; <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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <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
> -&gt; <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
> -&gt; <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
>=&gt;</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) =&gt; a -&gt; Int
 g :: (?x :: Int -&gt; Int) =&gt; a -&gt; Int
 h :: (r\l) =&gt; {r} =&gt; {l::Int | r}
</PRE
><P
>Here the <TT
>Eq a</TT
> and <TT
>?x :: Int -&gt; Int</TT
> and <TT
>rl</TT
> are all called &quot;predicates&quot;
</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/Data-Eq.html#t%3AEq"
>Eq</A
> <A HREF="Type.html#t%3APredType"
>PredType</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base/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
> -&gt; <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
>] -&gt; [<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/Data-Char.html#t%3AString"
>String</A
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; <A HREF="../base/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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; (<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
> -&gt; (<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
> -&gt; <A HREF="../base/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
> -&gt; <A HREF="../base/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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
>] -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; (<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
> -&gt; <A HREF="../base/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
> -&gt; ([<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="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; ([<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
> -&gt; <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
> -&gt; <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 =&gt; [a] -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; ([(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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <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
> -&gt; <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
> -&gt; [<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
> -&gt; <A HREF="../base/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
> -&gt; (<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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
>] -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; <A HREF="../base/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
> -&gt; ([<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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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-&gt;a)
 foo = case undefined :: R of
            R f -&gt; 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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <A HREF="Type.html#t%3AType"
>Type</A
></TD
></TR
><TR
><TD CLASS="doc"
>Unwrap one layer of newtype on a type constructor and it's 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
>] -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <A HREF="../base/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
> -&gt; [(<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
> -&gt; [(<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
> -&gt; <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
> -&gt; [<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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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 -&gt; a
 (-&gt;)  :: ?? -&gt; ? -&gt; \*
 (\\(x::t) -&gt; ...)
</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
> -&gt; <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
> -&gt; ([<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="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; ([<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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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 -&gt; <A HREF="../ghc-prim/GHC-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 -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <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 -&gt; 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
>] -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="doc"
><TT
>k1 `isSubKind` k2</TT
> checks that <TT
>k1</TT
> &lt;: <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
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
><TR
><TD CLASS="doc"
><TT
>kc1 `isSubKindCon` kc2</TT
> checks that <TT
>kc1</TT
> &lt;: <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
> -&gt; <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
>] -&gt; <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
> -&gt; <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
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
></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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; [<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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; (<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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; (<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
> -&gt; <A HREF="Var.html#t%3ATyVar"
>TyVar</A
> -&gt; (<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
> -&gt; <A HREF="VarSet.html#t%3ATyVarSet"
>TyVarSet</A
> -&gt; <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
> -&gt; <A HREF="Var.html#t%3ATyVar"
>TyVar</A
> -&gt; (<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
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; (<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
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; (<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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <A HREF="../ghc-prim/GHC-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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <A HREF="../ghc-prim/GHC-Ordering.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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <A HREF="../ghc-prim/GHC-Ordering.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
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <A HREF="../ghc-prim/GHC-Ordering.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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="../ghc-prim/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
>] -&gt; <A HREF="../ghc-prim/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
> -&gt; <A HREF="../base/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 &quot;look through&quot; 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 -&gt; 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
> -&gt; <A HREF="../base/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
> -&gt; <A HREF="../base/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
> -&gt; <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/Data-Eq.html#t%3AEq"
>Eq</A
> <A HREF="Type.html#t%3APrimRep"
>PrimRep</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base/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
> -&gt; <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
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3ATvSubstEnv"
>TvSubstEnv</A
> -&gt; <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
> -&gt; <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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
>)] -&gt; <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
> -&gt; <A HREF="Type.html#t%3ATvSubst"
>TvSubst</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3ATvSubstEnv"
>TvSubstEnv</A
> -&gt; <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
> -&gt; <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
> -&gt; [<A HREF="Var.html#t%3AVar"
>Var</A
>] -&gt; <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
> -&gt; <A HREF="Var.html#t%3ATyVar"
>TyVar</A
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <A HREF="Type.html#t%3ATvSubst"
>TvSubst</A
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3ATvSubstEnv"
>TvSubstEnv</A
> -&gt; <A HREF="Type.html#t%3ATvSubstEnv"
>TvSubstEnv</A
> -&gt; <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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <A HREF="../ghc-prim/GHC-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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; [<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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; [<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
> -&gt; <A HREF="Type.html#t%3AThetaType"
>ThetaType</A
> -&gt; <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
> -&gt; <A HREF="Type.html#t%3APredType"
>PredType</A
> -&gt; <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
> -&gt; <A HREF="Var.html#t%3ATyVar"
>TyVar</A
> -&gt; <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
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; [<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
> -&gt; <A HREF="Var.html#t%3ATyVar"
>TyVar</A
> -&gt; (<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
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
> -&gt; <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
> -&gt; <A HREF="Var.html#t%3ATyVar"
>TyVar</A
> -&gt; <A HREF="../base/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
> -&gt; <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
> -&gt; <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 =&gt; a -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <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
> -&gt; <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
>] -&gt; <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
> -&gt; <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
> -&gt; <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
> -&gt; <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
> -&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>] -&gt; <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
> -&gt; <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
> -&gt; <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
> -&gt; <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.4.2</TD
></TR
></TABLE
></BODY
></HTML
>