Sophie

Sophie

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

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
>TyCon</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_TyCon.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"
>TyCon</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 TyCon data types
</A
></DT
><DD
><DL
><DT
><A HREF="#2"
>Constructing TyCons
</A
></DT
><DT
><A HREF="#3"
>Predicates on TyCons
</A
></DT
><DT
><A HREF="#4"
>Extracting information out of TyCons
</A
></DT
><DT
><A HREF="#5"
>Manipulating TyCons
</A
></DT
></DL
></DD
><DT
><A HREF="#6"
>Primitive representations of Types
</A
></DT
></DL
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></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"
><SPAN CLASS="keyword"
>data</SPAN
>  <A HREF="#t%3ATyCon"
>TyCon</A
> </TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>type</SPAN
> <A HREF="#t%3AFieldLabel"
>FieldLabel</A
> = <A HREF="Name.html#t%3AName"
>Name</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%3AAlgTyConRhs"
>AlgTyConRhs</A
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3AAbstractTyCon"
>AbstractTyCon</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AOpenTyCon"
>OpenTyCon</A
> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="recfield"
><A HREF="#v%3AotArgPoss"
>otArgPoss</A
> :: <A HREF="TyCon.html#t%3AAssocFamilyPermutation"
>AssocFamilyPermutation</A
></TD
></TR
></TABLE
>}</TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3ADataTyCon"
>DataTyCon</A
> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="recfield"
><A HREF="#v%3Adata_cons"
>data_cons</A
> :: [<A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
>]</TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3Ais_enum"
>is_enum</A
> :: <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
></TR
></TABLE
>}</TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3ANewTyCon"
>NewTyCon</A
> {<TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="recfield"
><A HREF="#v%3Adata_con"
>data_con</A
> :: <A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3Ant_rhs"
>nt_rhs</A
> :: <A HREF="Type.html#t%3AType"
>Type</A
></TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3Ant_etad_rhs"
>nt_etad_rhs</A
> :: ([<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>], <A HREF="Type.html#t%3AType"
>Type</A
>)</TD
></TR
><TR
><TD CLASS="recfield"
><A HREF="#v%3Ant_co"
>nt_co</A
> :: <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
></TABLE
>}</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AvisibleDataCons"
>visibleDataCons</A
> :: <A HREF="TyCon.html#t%3AAlgTyConRhs"
>AlgTyConRhs</A
> -&gt; [<A HREF="DataCon.html#t%3ADataCon"
>DataCon</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%3ATyConParent"
>TyConParent</A
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3ANoParentTyCon"
>NoParentTyCon</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AClassTyCon"
>ClassTyCon</A
> <A HREF="Class.html#t%3AClass"
>Class</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3AFamilyTyCon"
>FamilyTyCon</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> [<A HREF="Type.html#t%3AType"
>Type</A
>] <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></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%3ASynTyConRhs"
>SynTyConRhs</A
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="decl"
>= <A HREF="#v%3AOpenSynTyCon"
>OpenSynTyCon</A
> <A HREF="Type.html#t%3AKind"
>Kind</A
> <A HREF="TyCon.html#t%3AAssocFamilyPermutation"
>AssocFamilyPermutation</A
></TD
></TR
><TR
><TD CLASS="decl"
>| <A HREF="#v%3ASynonymTyCon"
>SynonymTyCon</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%3AAssocFamilyPermutation"
>AssocFamilyPermutation</A
> = <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> [<A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmkAlgTyCon"
>mkAlgTyCon</A
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; [<A HREF="Type.html#t%3APredType"
>PredType</A
>] -&gt; <A HREF="TyCon.html#t%3AAlgTyConRhs"
>AlgTyConRhs</A
> -&gt; [<A HREF="Var.html#t%3AId"
>Id</A
>] -&gt; <A HREF="TyCon.html#t%3ATyConParent"
>TyConParent</A
> -&gt; <A HREF="BasicTypes.html#t%3ARecFlag"
>RecFlag</A
> -&gt; <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
> -&gt; <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</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%3AmkClassTyCon"
>mkClassTyCon</A
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; <A HREF="TyCon.html#t%3AAlgTyConRhs"
>AlgTyConRhs</A
> -&gt; <A HREF="Class.html#t%3AClass"
>Class</A
> -&gt; <A HREF="BasicTypes.html#t%3ARecFlag"
>RecFlag</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%3AmkFunTyCon"
>mkFunTyCon</A
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</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%3AmkPrimTyCon"
>mkPrimTyCon</A
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</A
> -&gt; <A HREF="TyCon.html#t%3APrimRep"
>PrimRep</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%3AmkVoidPrimTyCon"
>mkVoidPrimTyCon</A
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</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%3AmkLiftedPrimTyCon"
>mkLiftedPrimTyCon</A
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</A
> -&gt; <A HREF="TyCon.html#t%3APrimRep"
>PrimRep</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%3AmkTupleTyCon"
>mkTupleTyCon</A
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</A
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; <A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
> -&gt; <A HREF="BasicTypes.html#t%3ABoxity"
>Boxity</A
> -&gt; <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</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%3AmkSynTyCon"
>mkSynTyCon</A
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; <A HREF="TyCon.html#t%3ASynTyConRhs"
>SynTyConRhs</A
> -&gt; <A HREF="TyCon.html#t%3ATyConParent"
>TyConParent</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%3AmkSuperKindTyCon"
>mkSuperKindTyCon</A
> :: <A HREF="Name.html#t%3AName"
>Name</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%3AmkCoercionTyCon"
>mkCoercionTyCon</A
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</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
>)) -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmkForeignTyCon"
>mkForeignTyCon</A
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="FastString.html#t%3AFastString"
>FastString</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</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%3AisAlgTyCon"
>isAlgTyCon</A
> :: <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%3AisClassTyCon"
>isClassTyCon</A
> :: <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%3AisFamInstTyCon"
>isFamInstTyCon</A
> :: <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%3AisFunTyCon"
>isFunTyCon</A
> :: <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%3AisPrimTyCon"
>isPrimTyCon</A
> :: <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%3AisTupleTyCon"
>isTupleTyCon</A
> :: <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%3AisUnboxedTupleTyCon"
>isUnboxedTupleTyCon</A
> :: <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%3AisBoxedTupleTyCon"
>isBoxedTupleTyCon</A
> :: <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%3AisSynTyCon"
>isSynTyCon</A
> :: <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%3AisClosedSynTyCon"
>isClosedSynTyCon</A
> :: <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%3AisOpenSynTyCon"
>isOpenSynTyCon</A
> :: <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%3AisSuperKindTyCon"
>isSuperKindTyCon</A
> :: <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%3AisCoercionTyCon"
>isCoercionTyCon</A
> :: <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%3AisCoercionTyCon_maybe"
>isCoercionTyCon_maybe</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> (<A HREF="BasicTypes.html#t%3AArity"
>Arity</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%3AisForeignTyCon"
>isForeignTyCon</A
> :: <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%3AisDataTyCon"
>isDataTyCon</A
> :: <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%3AisProductTyCon"
>isProductTyCon</A
> :: <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%3AisEnumerationTyCon"
>isEnumerationTyCon</A
> :: <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%3AisNewTyCon"
>isNewTyCon</A
> :: <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%3AisAbstractTyCon"
>isAbstractTyCon</A
> :: <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%3AisOpenTyCon"
>isOpenTyCon</A
> :: <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%3AisUnLiftedTyCon"
>isUnLiftedTyCon</A
> :: <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%3AisGadtSyntaxTyCon"
>isGadtSyntaxTyCon</A
> :: <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%3AisTyConAssoc"
>isTyConAssoc</A
> :: <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%3AisRecursiveTyCon"
>isRecursiveTyCon</A
> :: <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%3AisHiBootTyCon"
>isHiBootTyCon</A
> :: <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%3AisImplicitTyCon"
>isImplicitTyCon</A
> :: <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%3AtyConHasGenerics"
>tyConHasGenerics</A
> :: <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%3AtyConName"
>tyConName</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="Name.html#t%3AName"
>Name</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtyConKind"
>tyConKind</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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%3AtyConUnique"
>tyConUnique</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="Unique.html#t%3AUnique"
>Unique</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtyConTyVars"
>tyConTyVars</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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%3AtyConDataCons"
>tyConDataCons</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; [<A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
>]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtyConDataCons_maybe"
>tyConDataCons_maybe</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> [<A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
>]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtyConSingleDataCon_maybe"
>tyConSingleDataCon_maybe</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtyConFamilySize"
>tyConFamilySize</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtyConSelIds"
>tyConSelIds</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; [<A HREF="Var.html#t%3AId"
>Id</A
>]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtyConStupidTheta"
>tyConStupidTheta</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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%3AtyConArity"
>tyConArity</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtyConClass_maybe"
>tyConClass_maybe</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="Class.html#t%3AClass"
>Class</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtyConFamInst_maybe"
>tyConFamInst_maybe</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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%3AtyConFamilyCoercion_maybe"
>tyConFamilyCoercion_maybe</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsynTyConDefn"
>synTyConDefn</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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%3AsynTyConRhs"
>synTyConRhs</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="TyCon.html#t%3ASynTyConRhs"
>SynTyConRhs</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsynTyConType"
>synTyConType</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%3AsynTyConResKind"
>synTyConResKind</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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%3AtyConExtName"
>tyConExtName</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="FastString.html#t%3AFastString"
>FastString</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AalgTyConRhs"
>algTyConRhs</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="TyCon.html#t%3AAlgTyConRhs"
>AlgTyConRhs</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AnewTyConRhs"
>newTyConRhs</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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%3AnewTyConEtadRhs"
>newTyConEtadRhs</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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%3AunwrapNewTyCon_maybe"
>unwrapNewTyCon_maybe</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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
>, <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
>)</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AassocTyConArgPoss_maybe"
>assocTyConArgPoss_maybe</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> [<A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>]</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtupleTyConBoxity"
>tupleTyConBoxity</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="BasicTypes.html#t%3ABoxity"
>Boxity</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AtcExpandTyCon_maybe"
>tcExpandTyCon_maybe</A
> :: <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="Var.html#t%3ATyVar"
>TyVar</A
>, <A HREF="Type.html#t%3AType"
>Type</A
>)], <A HREF="Type.html#t%3AType"
>Type</A
>, [<A HREF="Type.html#t%3AType"
>Type</A
>])</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AcoreExpandTyCon_maybe"
>coreExpandTyCon_maybe</A
> :: <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="Var.html#t%3ATyVar"
>TyVar</A
>, <A HREF="Type.html#t%3AType"
>Type</A
>)], <A HREF="Type.html#t%3AType"
>Type</A
>, [<A HREF="Type.html#t%3AType"
>Type</A
>])</TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AmakeTyConAbstract"
>makeTyConAbstract</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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%3AnewTyConCo_maybe"
>newTyConCo_maybe</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AsetTyConArgPoss"
>setTyConArgPoss</A
> :: [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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%3AtyConPrimRep"
>tyConPrimRep</A
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="TyCon.html#t%3APrimRep"
>PrimRep</A
></TD
></TR
><TR
><TD CLASS="s8"
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="#v%3AprimRepSizeW"
>primRepSizeW</A
> :: <A HREF="TyCon.html#t%3APrimRep"
>PrimRep</A
> -&gt; <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</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 TyCon data types
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:TyCon"
><A NAME="t%3ATyCon"
></A
></A
><B
>TyCon</B
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
><P
>Represents type constructors. Type constructors are introduced by things such as:
</P
><P
>1) Data declarations: <TT
>data Foo = ...</TT
> creates the <TT
>Foo</TT
> type constructor of kind <TT
>*</TT
>
</P
><P
>2) Type synonyms: <TT
>type Foo = ...</TT
> creates the <TT
>Foo</TT
> type constructor
</P
><P
>3) Newtypes: <TT
>newtype Foo a = MkFoo ...</TT
> creates the <TT
>Foo</TT
> type constructor of kind <TT
>* -&gt; *</TT
>
</P
><P
>4) Class declarations: <TT
>class Foo where</TT
> creates the <TT
>Foo</TT
> type constructor of kind <TT
>*</TT
>
</P
><P
>5) Type coercions! This is because we represent a coercion from <TT
>t1</TT
> to <TT
>t2</TT
> as a <TT
><A HREF="Type.html#t%3AType"
>Type</A
></TT
>, where
    that type has kind <TT
>t1 ~ t2</TT
>. See <A HREF="Coercion.html"
>Coercion</A
> for more on this
</P
><P
>This data type also encodes a number of primitive, built in type constructors such as those
 for function and tuple types.
</P
></TD
></TR
><TR
><TD CLASS="section4"
><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:TyCon')" ALT="show/hide"
> Instances</TD
></TR
><TR
><TD CLASS="body"
><DIV ID="i:TyCon" 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="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base/Data-Ord.html#t%3AOrd"
>Ord</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Outputable.html#t%3AOutputable"
>Outputable</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Unique.html#t%3AUniquable"
>Uniquable</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Name.html#t%3ANamedThing"
>NamedThing</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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:FieldLabel"
><A NAME="t%3AFieldLabel"
></A
></A
><B
>FieldLabel</B
> = <A HREF="Name.html#t%3AName"
>Name</A
></TD
></TR
><TR
><TD CLASS="doc"
>Names of the fields in an algebraic record type
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:AlgTyConRhs"
><A NAME="t%3AAlgTyConRhs"
></A
></A
><B
>AlgTyConRhs</B
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>Represents right-hand-sides of <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>s for algebraic types
</TD
></TR
><TR
><TD CLASS="section4"
>Constructors</TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="5" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:AbstractTyCon"
><A NAME="v%3AAbstractTyCon"
></A
></A
><B
>AbstractTyCon</B
></TD
><TD CLASS="rdoc"
>Says that we know nothing about this data type, except that it's represented
 by a pointer.  Used when we export a data type abstractly into an .hi file.
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:OpenTyCon"
><A NAME="v%3AOpenTyCon"
></A
></A
><B
>OpenTyCon</B
></TD
><TD CLASS="rdoc"
><P
>Represents an open type family without a fixed right hand
 side.  Additional instances can appear at any time.
</P
><P
>These are introduced by either a top level declaration:
</P
><PRE
> data T a :: *
</PRE
><P
>Or an assoicated data type declaration, within a class declaration:
</P
><PRE
> class C a b where
   data T b :: *
</PRE
></TD
></TR
><TR
><TD CLASS="body" COLSPAN="2"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:otArgPoss"
><A NAME="v%3AotArgPoss"
></A
></A
><B
>otArgPoss</B
> :: <A HREF="TyCon.html#t%3AAssocFamilyPermutation"
>AssocFamilyPermutation</A
></TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:DataTyCon"
><A NAME="v%3ADataTyCon"
></A
></A
><B
>DataTyCon</B
></TD
><TD CLASS="rdoc"
>Information about those <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>s derived from a <TT
>data</TT
> declaration. This includes 
 data types with no constructors at all.
</TD
></TR
><TR
><TD CLASS="body" COLSPAN="2"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:data_cons"
><A NAME="v%3Adata_cons"
></A
></A
><B
>data_cons</B
> :: [<A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
>]</TD
><TD CLASS="rdoc"
><P
>The data type constructors; can be empty if the user declares
   the type to have no constructors
</P
><P
>INVARIANT: Kept in order of increasing <TT
><A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
></TT
> tag
</P
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:is_enum"
><A NAME="v%3Ais_enum"
></A
></A
><B
>is_enum</B
> :: <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="rdoc"
>Cached value: is this an enumeration type? (See <TT
><A HREF="TyCon.html#v%3AisEnumerationTyCon"
>isEnumerationTyCon</A
></TT
>)
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:NewTyCon"
><A NAME="v%3ANewTyCon"
></A
></A
><B
>NewTyCon</B
></TD
><TD CLASS="rdoc"
>Information about those <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>s derived from a <TT
>newtype</TT
> declaration
</TD
></TR
><TR
><TD CLASS="body" COLSPAN="2"
><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0"
><TR
><TD CLASS="arg"
><A NAME="v:data_con"
><A NAME="v%3Adata_con"
></A
></A
><B
>data_con</B
> :: <A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
></TD
><TD CLASS="rdoc"
>The unique constructor for the <TT
>newtype</TT
>. It has no existentials
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:nt_rhs"
><A NAME="v%3Ant_rhs"
></A
></A
><B
>nt_rhs</B
> :: <A HREF="Type.html#t%3AType"
>Type</A
></TD
><TD CLASS="rdoc"
><P
>Cached value: the argument type of the constructor, which
 is just the representation type of the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> (remember that
 <TT
>newtype</TT
>s do not exist at runtime so need a different representation
 type).
</P
><P
>The free <TT
><A HREF="Var.html#t%3ATyVar"
>TyVar</A
></TT
>s of this type are the <TT
><A HREF="TyCon.html#v%3AtyConTyVars"
>tyConTyVars</A
></TT
> from the corresponding
 <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
</P
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:nt_etad_rhs"
><A NAME="v%3Ant_etad_rhs"
></A
></A
><B
>nt_etad_rhs</B
> :: ([<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>], <A HREF="Type.html#t%3AType"
>Type</A
>)</TD
><TD CLASS="rdoc"
>Same as the <TT
><A HREF="TyCon.html#v%3Ant_rhs"
>nt_rhs</A
></TT
>, but this time eta-reduced. Hence the list of <TT
><A HREF="Var.html#t%3ATyVar"
>TyVar</A
></TT
>s in 
 this field may be shorter than the declared arity of the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>.
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:nt_co"
><A NAME="v%3Ant_co"
></A
></A
><B
>nt_co</B
> :: <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
><TD CLASS="rdoc"
><P
>A <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> (which is always a <TT
>CoercionTyCon</TT
>) that can have a Coercion 
 extracted from it to create the <TT
>newtype</TT
> from the representation <TT
><A HREF="Type.html#t%3AType"
>Type</A
></TT
>.
</P
><P
>This field is optional for non-recursive <TT
>newtype</TT
>s only.
</P
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:visibleDataCons"
><A NAME="v%3AvisibleDataCons"
></A
></A
><B
>visibleDataCons</B
> :: <A HREF="TyCon.html#t%3AAlgTyConRhs"
>AlgTyConRhs</A
> -&gt; [<A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
>]</TD
></TR
><TR
><TD CLASS="doc"
><P
>Extract those <TT
><A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
></TT
>s that we are able to learn about. Note that visibility in this sense does not
 correspond to visibility in the context of any particular user program!
</P
><P
>Both type classes as well as family instances imply implicit
 type constructors.  These implicit type constructors refer to their parent
 structure (ie, the class or family from which they derive) using a type of
 the following form.  We use <TT
><A HREF="TyCon.html#t%3ATyConParent"
>TyConParent</A
></TT
> for both algebraic and synonym 
 types, but the variant <TT
><A HREF="TyCon.html#v%3AClassTyCon"
>ClassTyCon</A
></TT
> will only be used by algebraic <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>s.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:TyConParent"
><A NAME="t%3ATyConParent"
></A
></A
><B
>TyConParent</B
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><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:NoParentTyCon"
><A NAME="v%3ANoParentTyCon"
></A
></A
><B
>NoParentTyCon</B
></TD
><TD CLASS="rdoc"
>An ordinary type constructor has no parent.
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:ClassTyCon"
><A NAME="v%3AClassTyCon"
></A
></A
><B
>ClassTyCon</B
> <A HREF="Class.html#t%3AClass"
>Class</A
></TD
><TD CLASS="rdoc"
>Type constructors representing a class dictionary.
</TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:FamilyTyCon"
><A NAME="v%3AFamilyTyCon"
></A
></A
><B
>FamilyTyCon</B
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> [<A HREF="Type.html#t%3AType"
>Type</A
>] <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
><TD CLASS="rdoc"
><P
>Type constructors representing an instance of a type family. Parameters:
</P
><P
>1) The type family in question
</P
><P
>2) Instance types; free variables are the <TT
><A HREF="TyCon.html#v%3AtyConTyVars"
>tyConTyVars</A
></TT
>
  of the current <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> (not the family one). INVARIANT: 
  the number of types matches the arity of the family <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
</P
><P
>3) A <TT
>CoercionTyCon</TT
> identifying the representation
  type with the type instance family
</P
></TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>data</SPAN
>  <A NAME="t:SynTyConRhs"
><A NAME="t%3ASynTyConRhs"
></A
></A
><B
>SynTyConRhs</B
>  </TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="ndoc"
>Information pertaining to the expansion of a type synonym (<TT
>type</TT
>)
</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:OpenSynTyCon"
><A NAME="v%3AOpenSynTyCon"
></A
></A
><B
>OpenSynTyCon</B
> <A HREF="Type.html#t%3AKind"
>Kind</A
> <A HREF="TyCon.html#t%3AAssocFamilyPermutation"
>AssocFamilyPermutation</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
><A NAME="v:SynonymTyCon"
><A NAME="v%3ASynonymTyCon"
></A
></A
><B
>SynonymTyCon</B
> <A HREF="Type.html#t%3AType"
>Type</A
></TD
><TD CLASS="rdoc"
>The synonym mentions head type variables. It acts as a
 template for the expansion when the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is applied to some
 types.
</TD
></TR
></TABLE
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><SPAN CLASS="keyword"
>type</SPAN
> <A NAME="t:AssocFamilyPermutation"
><A NAME="t%3AAssocFamilyPermutation"
></A
></A
><B
>AssocFamilyPermutation</B
> = <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> [<A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>]</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="2"
><A NAME="2"
>Constructing TyCons
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mkAlgTyCon"
><A NAME="v%3AmkAlgTyCon"
></A
></A
><B
>mkAlgTyCon</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="Name.html#t%3AName"
>Name</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
></TD
><TD CLASS="rdoc"
>Kind of the resulting <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>]</TD
><TD CLASS="rdoc"
><TT
><A HREF="Var.html#t%3ATyVar"
>TyVar</A
></TT
>s scoped over: see <TT
><A HREF="TyCon.html#v%3AtyConTyVars"
>tyConTyVars</A
></TT
>. Arity is inferred from the length of this list
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; [<A HREF="Type.html#t%3APredType"
>PredType</A
>]</TD
><TD CLASS="rdoc"
>Stupid theta: see <TT
>algTcStupidTheta</TT
>
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="TyCon.html#t%3AAlgTyConRhs"
>AlgTyConRhs</A
></TD
><TD CLASS="rdoc"
>Information about dat aconstructors
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; [<A HREF="Var.html#t%3AId"
>Id</A
>]</TD
><TD CLASS="rdoc"
>Selector <TT
><A HREF="Var.html#t%3AId"
>Id</A
></TT
>s
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="TyCon.html#t%3ATyConParent"
>TyConParent</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="BasicTypes.html#t%3ARecFlag"
>RecFlag</A
></TD
><TD CLASS="rdoc"
>Is the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> recursive?
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="rdoc"
>Does it have generic functions? See <TT
>hasGenerics</TT
>
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="rdoc"
>Was the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> declared with GADT syntax?
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>This is the making of an algebraic <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>. Notably, you have to pass in the generic (in the -XGenerics sense)
 information about the type constructor - you can get hold of it easily (see Generics module)
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mkClassTyCon"
><A NAME="v%3AmkClassTyCon"
></A
></A
><B
>mkClassTyCon</B
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; <A HREF="TyCon.html#t%3AAlgTyConRhs"
>AlgTyConRhs</A
> -&gt; <A HREF="Class.html#t%3AClass"
>Class</A
> -&gt; <A HREF="BasicTypes.html#t%3ARecFlag"
>RecFlag</A
> -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>Simpler specialization of <TT
><A HREF="TyCon.html#v%3AmkAlgTyCon"
>mkAlgTyCon</A
></TT
> for classes
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mkFunTyCon"
><A NAME="v%3AmkFunTyCon"
></A
></A
><B
>mkFunTyCon</B
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>Given the name of the function type constructor and it's kind, create the
 corresponding <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>. It is reccomended to use TypeRep.funTyCon if you want 
 this functionality
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mkPrimTyCon"
><A NAME="v%3AmkPrimTyCon"
></A
></A
><B
>mkPrimTyCon</B
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</A
> -&gt; <A HREF="TyCon.html#t%3APrimRep"
>PrimRep</A
> -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>Create an unlifted primitive <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>, such as <TT
>Int#</TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mkVoidPrimTyCon"
><A NAME="v%3AmkVoidPrimTyCon"
></A
></A
><B
>mkVoidPrimTyCon</B
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</A
> -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>Create the special void <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> which is unlifted and has <TT
><A HREF="TyCon.html#v%3AVoidRep"
>VoidRep</A
></TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mkLiftedPrimTyCon"
><A NAME="v%3AmkLiftedPrimTyCon"
></A
></A
><B
>mkLiftedPrimTyCon</B
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</A
> -&gt; <A HREF="TyCon.html#t%3APrimRep"
>PrimRep</A
> -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>Create a lifted primitive <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> such as <TT
>RealWorld</TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mkTupleTyCon"
><A NAME="v%3AmkTupleTyCon"
></A
></A
><B
>mkTupleTyCon</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="Name.html#t%3AName"
>Name</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
></TD
><TD CLASS="rdoc"
>Kind of the resulting <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</A
></TD
><TD CLASS="rdoc"
>Arity of the tuple
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>]</TD
><TD CLASS="rdoc"
><TT
><A HREF="Var.html#t%3ATyVar"
>TyVar</A
></TT
>s scoped over: see <TT
><A HREF="TyCon.html#v%3AtyConTyVars"
>tyConTyVars</A
></TT
>
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="BasicTypes.html#t%3ABoxity"
>Boxity</A
></TD
><TD CLASS="rdoc"
>Whether the tuple is boxed or unboxed
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="../ghc-prim/GHC-Bool.html#t%3ABool"
>Bool</A
></TD
><TD CLASS="rdoc"
>Does it have generic functions? See <TT
>hasGenerics</TT
>
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
>Foreign-imported (.NET) type constructors are represented
 as primitive, but <EM
>lifted</EM
>, TyCons for now. They are lifted
 because the Haskell type <TT
>T</TT
> representing the (foreign) .NET
 type <TT
>T</TT
> is actually implemented (in ILX) as a <TT
>thunk<A HREF="T"
>T</A
></TT
>
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mkSynTyCon"
><A NAME="v%3AmkSynTyCon"
></A
></A
><B
>mkSynTyCon</B
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; <A HREF="TyCon.html#t%3ASynTyConRhs"
>SynTyConRhs</A
> -&gt; <A HREF="TyCon.html#t%3ATyConParent"
>TyConParent</A
> -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>Create a type synonym <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mkSuperKindTyCon"
><A NAME="v%3AmkSuperKindTyCon"
></A
></A
><B
>mkSuperKindTyCon</B
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>Create a super-kind <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mkCoercionTyCon"
><A NAME="v%3AmkCoercionTyCon"
></A
></A
><B
>mkCoercionTyCon</B
> :: <A HREF="Name.html#t%3AName"
>Name</A
> -&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</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
>)) -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>Create a coercion <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:mkForeignTyCon"
><A NAME="v%3AmkForeignTyCon"
></A
></A
><B
>mkForeignTyCon</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="Name.html#t%3AName"
>Name</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="FastString.html#t%3AFastString"
>FastString</A
></TD
><TD CLASS="rdoc"
>Name of the foreign imported thing, maybe
</TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>-&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
><TD CLASS="rdoc"
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="3"
><A NAME="3"
>Predicates on TyCons
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isAlgTyCon"
><A NAME="v%3AisAlgTyCon"
></A
></A
><B
>isAlgTyCon</B
> :: <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"
>Returns <TT
>True</TT
> if the supplied <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> resulted from either a <TT
>data</TT
> or <TT
>newtype</TT
> declaration
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isClassTyCon"
><A NAME="v%3AisClassTyCon"
></A
></A
><B
>isClassTyCon</B
> :: <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"
>Is this <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> that for a class instance?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isFamInstTyCon"
><A NAME="v%3AisFamInstTyCon"
></A
></A
><B
>isFamInstTyCon</B
> :: <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"
>Is this <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> that for a family instance, be that for a synonym or an
 algebraic family instance?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isFunTyCon"
><A NAME="v%3AisFunTyCon"
></A
></A
><B
>isFunTyCon</B
> :: <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="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isPrimTyCon"
><A NAME="v%3AisPrimTyCon"
></A
></A
><B
>isPrimTyCon</B
> :: <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"
>Does this <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> represent something that cannot be defined in Haskell?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isTupleTyCon"
><A NAME="v%3AisTupleTyCon"
></A
></A
><B
>isTupleTyCon</B
> :: <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"
><P
>Does this <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> represent a tuple?
</P
><P
>NB: when compiling <TT
>Data.Tuple</TT
>, the tycons won't reply <TT
>True</TT
> to
 <TT
><A HREF="TyCon.html#v%3AisTupleTyCon"
>isTupleTyCon</A
></TT
>, becuase they are built as AlgTyCons.  However they
 get spat into the interface file as tuple tycons, so I don't think
 it matters.
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isUnboxedTupleTyCon"
><A NAME="v%3AisUnboxedTupleTyCon"
></A
></A
><B
>isUnboxedTupleTyCon</B
> :: <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"
>Is this the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> for an unboxed tuple?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isBoxedTupleTyCon"
><A NAME="v%3AisBoxedTupleTyCon"
></A
></A
><B
>isBoxedTupleTyCon</B
> :: <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"
>Is this the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> for a boxed tuple?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isSynTyCon"
><A NAME="v%3AisSynTyCon"
></A
></A
><B
>isSynTyCon</B
> :: <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"
><P
>A <EM
>product</EM
> <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> must both:
</P
><P
>1. Have <EM
>one</EM
> constructor
</P
><P
>2. <EM
>Not</EM
> be existential
</P
><P
>However other than this there are few restrictions: they may be <TT
>data</TT
> or <TT
>newtype</TT
> 
 <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>s of any boxity and may even be recursive.
</P
><P
>Is this a <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> representing a type synonym (<TT
>type</TT
>)?
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isClosedSynTyCon"
><A NAME="v%3AisClosedSynTyCon"
></A
></A
><B
>isClosedSynTyCon</B
> :: <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"
>Is this a synonym <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> that can have no further instances appear?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isOpenSynTyCon"
><A NAME="v%3AisOpenSynTyCon"
></A
></A
><B
>isOpenSynTyCon</B
> :: <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"
>Is this a synonym <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> that can have may have further instances appear?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isSuperKindTyCon"
><A NAME="v%3AisSuperKindTyCon"
></A
></A
><B
>isSuperKindTyCon</B
> :: <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"
>Is this a super-kind <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isCoercionTyCon"
><A NAME="v%3AisCoercionTyCon"
></A
></A
><B
>isCoercionTyCon</B
> :: <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"
>Is this a <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> that represents a coercion?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isCoercionTyCon_maybe"
><A NAME="v%3AisCoercionTyCon_maybe"
></A
></A
><B
>isCoercionTyCon_maybe</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> (<A HREF="BasicTypes.html#t%3AArity"
>Arity</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="doc"
>Attempt to pull a <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> apart into the arity and <TT
>coKindFun</TT
> of
 a coercion <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>. Returns <TT
>Nothing</TT
> if the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is not of the
 appropriate kind
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isForeignTyCon"
><A NAME="v%3AisForeignTyCon"
></A
></A
><B
>isForeignTyCon</B
> :: <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"
>Is this the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> of a foreign-imported type constructor?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isDataTyCon"
><A NAME="v%3AisDataTyCon"
></A
></A
><B
>isDataTyCon</B
> :: <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"
><P
>Returns <TT
>True</TT
> for data types that are <EM
>definitely</EM
> represented by 
 heap-allocated constructors.  These are scrutinised by Core-level 
 <TT
>case</TT
> expressions, and they get info tables allocated for them.
</P
><P
>Generally, the function will be true for all <TT
>data</TT
> types and false
 for <TT
>newtype</TT
>s, unboxed tuples and type family <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>s. But it is
 not guarenteed to return <TT
>True</TT
> in all cases that it could.
</P
><P
>NB: for a data type family, only the <EM
>instance</EM
> <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>s
     get an info table.  The family declaration <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> does not
</P
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isProductTyCon"
><A NAME="v%3AisProductTyCon"
></A
></A
><B
>isProductTyCon</B
> :: <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="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isEnumerationTyCon"
><A NAME="v%3AisEnumerationTyCon"
></A
></A
><B
>isEnumerationTyCon</B
> :: <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"
>Is this an algebraic <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> which is just an enumeration of values?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isNewTyCon"
><A NAME="v%3AisNewTyCon"
></A
></A
><B
>isNewTyCon</B
> :: <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"
>Is this <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> that for a <TT
>newtype</TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isAbstractTyCon"
><A NAME="v%3AisAbstractTyCon"
></A
></A
><B
>isAbstractTyCon</B
> :: <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"
>Test if the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is algebraic but abstract (invisible data constructors)
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isOpenTyCon"
><A NAME="v%3AisOpenTyCon"
></A
></A
><B
>isOpenTyCon</B
> :: <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"
>Is this a <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>, synonym or otherwise, that may have further instances appear?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isUnLiftedTyCon"
><A NAME="v%3AisUnLiftedTyCon"
></A
></A
><B
>isUnLiftedTyCon</B
> :: <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"
>Is this <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> unlifted (i.e. cannot contain bottom)? Note that this can only
 be true for primitive and unboxed-tuple <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>s
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isGadtSyntaxTyCon"
><A NAME="v%3AisGadtSyntaxTyCon"
></A
></A
><B
>isGadtSyntaxTyCon</B
> :: <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"
>Is this an algebraic <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> declared with the GADT syntax?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isTyConAssoc"
><A NAME="v%3AisTyConAssoc"
></A
></A
><B
>isTyConAssoc</B
> :: <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"
>Are we able to extract informationa <TT
><A HREF="Var.html#t%3ATyVar"
>TyVar</A
></TT
> to class argument list
 mappping from a given <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isRecursiveTyCon"
><A NAME="v%3AisRecursiveTyCon"
></A
></A
><B
>isRecursiveTyCon</B
> :: <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"
>Is this a recursive <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isHiBootTyCon"
><A NAME="v%3AisHiBootTyCon"
></A
></A
><B
>isHiBootTyCon</B
> :: <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"
>Did this <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> originate from type-checking a .h*-boot file?
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:isImplicitTyCon"
><A NAME="v%3AisImplicitTyCon"
></A
></A
><B
>isImplicitTyCon</B
> :: <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"
><P
>Identifies implicit tycons that, in particular, do not go into interface
 files (because they are implicitly reconstructed when the interface is
 read).
</P
><P
>Note that:
</P
><UL
><LI
> Associated families are implicit, as they are re-constructed from
   the class declaration in which they reside, and 
</LI
><LI
> Family instances are <EM
>not</EM
> implicit as they represent the instance body
   (similar to a <TT
>dfun</TT
> does that for a class instance).
</LI
></UL
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConHasGenerics"
><A NAME="v%3AtyConHasGenerics"
></A
></A
><B
>tyConHasGenerics</B
> :: <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"
>Does this <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> have any generic to/from functions available? See also <TT
>hasGenerics</TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="4"
><A NAME="4"
>Extracting information out of TyCons
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConName"
><A NAME="v%3AtyConName"
></A
></A
><B
>tyConName</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="Name.html#t%3AName"
>Name</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConKind"
><A NAME="v%3AtyConKind"
></A
></A
><B
>tyConKind</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConUnique"
><A NAME="v%3AtyConUnique"
></A
></A
><B
>tyConUnique</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="Unique.html#t%3AUnique"
>Unique</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConTyVars"
><A NAME="v%3AtyConTyVars"
></A
></A
><B
>tyConTyVars</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>]</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConDataCons"
><A NAME="v%3AtyConDataCons"
></A
></A
><B
>tyConDataCons</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; [<A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
>]</TD
></TR
><TR
><TD CLASS="doc"
>As <TT
><A HREF="TyCon.html#v%3AtyConDataCons_maybe"
>tyConDataCons_maybe</A
></TT
>, but returns the empty list of constructors if no constructors
 could be found
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConDataCons_maybe"
><A NAME="v%3AtyConDataCons_maybe"
></A
></A
><B
>tyConDataCons_maybe</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> [<A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
>]</TD
></TR
><TR
><TD CLASS="doc"
>Determine the <TT
><A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
></TT
>s originating from the given <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>, if the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is the
 sort that can have any constructors (note: this does not include abstract algebraic types)
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConSingleDataCon_maybe"
><A NAME="v%3AtyConSingleDataCon_maybe"
></A
></A
><B
>tyConSingleDataCon_maybe</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="DataCon.html#t%3ADataCon"
>DataCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>If the given <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> has a <EM
>single</EM
> data constructor, i.e. it is a <TT
>data</TT
> type with one
 alternative, a tuple type or a <TT
>newtype</TT
> then that constructor is returned. If the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
 has more than one constructor, or represents a primitive or function type constructor then
 <TT
>Nothing</TT
> is returned. In any other case, the function panics
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConFamilySize"
><A NAME="v%3AtyConFamilySize"
></A
></A
><B
>tyConFamilySize</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
></TD
></TR
><TR
><TD CLASS="doc"
>Determine the number of value constructors a <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> has. Panics if the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
 is not algebraic or a tuple
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConSelIds"
><A NAME="v%3AtyConSelIds"
></A
></A
><B
>tyConSelIds</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; [<A HREF="Var.html#t%3AId"
>Id</A
>]</TD
></TR
><TR
><TD CLASS="doc"
>Extract the record selector <TT
><A HREF="Var.html#t%3AId"
>Id</A
></TT
>s from an algebraic <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> and returns the empty list otherwise
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConStupidTheta"
><A NAME="v%3AtyConStupidTheta"
></A
></A
><B
>tyConStupidTheta</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; [<A HREF="Type.html#t%3APredType"
>PredType</A
>]</TD
></TR
><TR
><TD CLASS="doc"
>Find the &quot;stupid theta&quot; of the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>. A &quot;stupid theta&quot; is the context to the left of
 an algebraic type declaration, e.g. <TT
>Eq a</TT
> in the declaration <TT
>data Eq a =&gt; T a ...</TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConArity"
><A NAME="v%3AtyConArity"
></A
></A
><B
>tyConArity</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="BasicTypes.html#t%3AArity"
>Arity</A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConClass_maybe"
><A NAME="v%3AtyConClass_maybe"
></A
></A
><B
>tyConClass_maybe</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="Class.html#t%3AClass"
>Class</A
></TD
></TR
><TR
><TD CLASS="doc"
>If this <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is that for a class instance, return the class it is for.
 Otherwise returns <TT
>Nothing</TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConFamInst_maybe"
><A NAME="v%3AtyConFamInst_maybe"
></A
></A
><B
>tyConFamInst_maybe</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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"
>If this <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is that of a family instance, return the family in question
 and the instance types. Otherwise, return <TT
>Nothing</TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConFamilyCoercion_maybe"
><A NAME="v%3AtyConFamilyCoercion_maybe"
></A
></A
><B
>tyConFamilyCoercion_maybe</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>If this <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is that of a family instance, return a <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> which represents 
 a coercion identifying the representation type with the type instance family.
 Otherwise, return <TT
>Nothing</TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:synTyConDefn"
><A NAME="v%3AsynTyConDefn"
></A
></A
><B
>synTyConDefn</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; ([<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>], <A HREF="Type.html#t%3AType"
>Type</A
>)</TD
></TR
><TR
><TD CLASS="doc"
>Extract the <TT
><A HREF="Var.html#t%3ATyVar"
>TyVar</A
></TT
>s bound by a type synonym and the corresponding (unsubstituted) right hand side.
 If the given <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is not a type synonym, panics
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:synTyConRhs"
><A NAME="v%3AsynTyConRhs"
></A
></A
><B
>synTyConRhs</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="TyCon.html#t%3ASynTyConRhs"
>SynTyConRhs</A
></TD
></TR
><TR
><TD CLASS="doc"
>Extract the information pertaining to the right hand side of a type synonym (<TT
>type</TT
>) declaration. Panics
 if the given <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is not a type synonym
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:synTyConType"
><A NAME="v%3AsynTyConType"
></A
></A
><B
>synTyConType</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="Type.html#t%3AType"
>Type</A
></TD
></TR
><TR
><TD CLASS="doc"
>Find the expansion of the type synonym represented by the given <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>. The free variables of this
 type will typically include those <TT
><A HREF="Var.html#t%3ATyVar"
>TyVar</A
></TT
>s bound by the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>. Panics if the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is not that of
 a type synonym
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:synTyConResKind"
><A NAME="v%3AsynTyConResKind"
></A
></A
><B
>synTyConResKind</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="Type.html#t%3AKind"
>Kind</A
></TD
></TR
><TR
><TD CLASS="doc"
>Find the <TT
><A HREF="Type.html#t%3AKind"
>Kind</A
></TT
> of an open type synonym. Panics if the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is not an open type synonym
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tyConExtName"
><A NAME="v%3AtyConExtName"
></A
></A
><B
>tyConExtName</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="FastString.html#t%3AFastString"
>FastString</A
></TD
></TR
><TR
><TD CLASS="doc"
><TT
>Just e</TT
> for foreign-imported types, holds the name of the imported thing
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:algTyConRhs"
><A NAME="v%3AalgTyConRhs"
></A
></A
><B
>algTyConRhs</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="TyCon.html#t%3AAlgTyConRhs"
>AlgTyConRhs</A
></TD
></TR
><TR
><TD CLASS="doc"
>Extract an <TT
><A HREF="TyCon.html#t%3AAlgTyConRhs"
>AlgTyConRhs</A
></TT
> with information about data constructors from an algebraic or tuple
 <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>. Panics for any other sort of <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:newTyConRhs"
><A NAME="v%3AnewTyConRhs"
></A
></A
><B
>newTyConRhs</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; ([<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>], <A HREF="Type.html#t%3AType"
>Type</A
>)</TD
></TR
><TR
><TD CLASS="doc"
>Extract the bound type variables and type expansion of a type synonym <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>. Panics if the
 <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is not a synonym
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:newTyConEtadRhs"
><A NAME="v%3AnewTyConEtadRhs"
></A
></A
><B
>newTyConEtadRhs</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; ([<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>], <A HREF="Type.html#t%3AType"
>Type</A
>)</TD
></TR
><TR
><TD CLASS="doc"
>Extract the bound type variables and type expansion of an eta-contracted type synonym <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>.
 Panics if the <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is not a synonym
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:unwrapNewTyCon_maybe"
><A NAME="v%3AunwrapNewTyCon_maybe"
></A
></A
><B
>unwrapNewTyCon_maybe</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</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
>, <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
>)</TD
></TR
><TR
><TD CLASS="doc"
>Take a <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> apart into the <TT
><A HREF="Var.html#t%3ATyVar"
>TyVar</A
></TT
>s it scopes over, the <TT
><A HREF="Type.html#t%3AType"
>Type</A
></TT
> it expands
 into, and (possibly) a coercion from the representation type to the <TT
>newtype</TT
>.
 Returns <TT
>Nothing</TT
> if this is not possible.
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:assocTyConArgPoss_maybe"
><A NAME="v%3AassocTyConArgPoss_maybe"
></A
></A
><B
>assocTyConArgPoss_maybe</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> [<A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
>]</TD
></TR
><TR
><TD CLASS="doc"
>Extract the mapping from <TT
><A HREF="Var.html#t%3ATyVar"
>TyVar</A
></TT
> indexes to indexes in the corresponding family
 argument lists form an open <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> of any sort, if the given <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is indeed
 such a beast and that information is available
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tupleTyConBoxity"
><A NAME="v%3AtupleTyConBoxity"
></A
></A
><B
>tupleTyConBoxity</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="BasicTypes.html#t%3ABoxity"
>Boxity</A
></TD
></TR
><TR
><TD CLASS="doc"
>Extract the boxity of the given <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>, if it is a <TT
>TupleTyCon</TT
>.
 Panics otherwise
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section2"
><A NAME="5"
><A NAME="5"
>Manipulating TyCons
</A
></A
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:tcExpandTyCon_maybe"
><A NAME="v%3AtcExpandTyCon_maybe"
></A
></A
><B
>tcExpandTyCon_maybe</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>-&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>]</TD
><TD CLASS="rdoc"
>Arguments to <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
</TD
></TR
><TR
><TD CLASS="arg"
>-&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
>)], <A HREF="Type.html#t%3AType"
>Type</A
>, [<A HREF="Type.html#t%3AType"
>Type</A
>])</TD
><TD CLASS="rdoc"
>Returns a <TT
><A HREF="Var.html#t%3ATyVar"
>TyVar</A
></TT
> substitution, the body type
 of the synonym (not yet substituted) and any arguments
 remaining from the application
</TD
></TR
><TR
><TD CLASS="ndoc" COLSPAN="2"
><P
>Used to create the view the <EM
>typechecker</EM
> has on <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>s. We expand (closed) synonyms only, cf. <TT
><A HREF="TyCon.html#v%3AcoreExpandTyCon_maybe"
>coreExpandTyCon_maybe</A
></TT
>
</P
><P
>Used to create the view <EM
>Core</EM
> has on <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>s. We expand not only closed synonyms like <TT
><A HREF="TyCon.html#v%3AtcExpandTyCon_maybe"
>tcExpandTyCon_maybe</A
></TT
>,
 but also non-recursive <TT
>newtype</TT
>s
</P
></TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:coreExpandTyCon_maybe"
><A NAME="v%3AcoreExpandTyCon_maybe"
></A
></A
><B
>coreExpandTyCon_maybe</B
></TD
></TR
><TR
><TD CLASS="body"
><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0"
><TR
><TD CLASS="arg"
>:: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
><TD CLASS="rdoc"
></TD
></TR
><TR
><TD CLASS="arg"
>-&gt; [<A HREF="Type.html#t%3AType"
>Type</A
>]</TD
><TD CLASS="rdoc"
>Arguments to <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
</TD
></TR
><TR
><TD CLASS="arg"
>-&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
>)], <A HREF="Type.html#t%3AType"
>Type</A
>, [<A HREF="Type.html#t%3AType"
>Type</A
>])</TD
><TD CLASS="rdoc"
>Returns a <TT
><A HREF="Var.html#t%3ATyVar"
>TyVar</A
></TT
> substitution, the body type
 of the synonym (not yet substituted) and any arguments
 remaining from the application
</TD
></TR
></TABLE
></TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:makeTyConAbstract"
><A NAME="v%3AmakeTyConAbstract"
></A
></A
><B
>makeTyConAbstract</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>Make an algebraic <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> abstract. Panics if the supplied <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
> is not algebraic
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:newTyConCo_maybe"
><A NAME="v%3AnewTyConCo_maybe"
></A
></A
><B
>newTyConCo_maybe</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="../base/Data-Maybe.html#t%3AMaybe"
>Maybe</A
> <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>Extracts the <TT
>newtype</TT
> coercion from such a <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>, which can be used to construct something
 with the <TT
>newtype</TT
>s type from its representation type (right hand side). If the supplied <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
 is not a <TT
>newtype</TT
>, returns <TT
>Nothing</TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:setTyConArgPoss"
><A NAME="v%3AsetTyConArgPoss"
></A
></A
><B
>setTyConArgPoss</B
> :: [<A HREF="Var.html#t%3ATyVar"
>TyVar</A
>] -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TD
></TR
><TR
><TD CLASS="doc"
>Set the AssocFamilyPermutation structure in an 
 associated data or type synonym.  The [TyVar] are the
 class type variables.  Remember, the tyvars of an associated
 data/type are a subset of the class tyvars; except that an
 associated data type can have extra type variables at the
 end (see Note [Avoid name clashes for associated data types] in TcHsType)
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="section1"
><A NAME="6"
><A NAME="6"
>Primitive representations of Types
</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="TyCon.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="TyCon.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="TyCon.html#t%3APrimRep"
>PrimRep</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="../base/Text-Show.html#t%3AShow"
>Show</A
> <A HREF="TyCon.html#t%3APrimRep"
>PrimRep</A
></TD
></TR
><TR
><TD CLASS="decl"
><A HREF="Outputable.html#t%3AOutputable"
>Outputable</A
> <A HREF="TyCon.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:tyConPrimRep"
><A NAME="v%3AtyConPrimRep"
></A
></A
><B
>tyConPrimRep</B
> :: <A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
> -&gt; <A HREF="TyCon.html#t%3APrimRep"
>PrimRep</A
></TD
></TR
><TR
><TD CLASS="doc"
>Find the primitive representation of a <TT
><A HREF="TyCon.html#t%3ATyCon"
>TyCon</A
></TT
>
</TD
></TR
><TR
><TD CLASS="s15"
></TD
></TR
><TR
><TD CLASS="decl"
><A NAME="v:primRepSizeW"
><A NAME="v%3AprimRepSizeW"
></A
></A
><B
>primRepSizeW</B
> :: <A HREF="TyCon.html#t%3APrimRep"
>PrimRep</A
> -&gt; <A HREF="../ghc-prim/GHC-Types.html#t%3AInt"
>Int</A
></TD
></TR
><TR
><TD CLASS="doc"
>Find the size of a <TT
><A HREF="TyCon.html#t%3APrimRep"
>PrimRep</A
></TT
>, in words
</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
>