Sophie

Sophie

distrib > Mageia > 5 > x86_64 > media > core-release > by-pkgid > 956c458aa5fe9afc4d2c00cb7b491287 > files > 3122

ghc-7.4.2-4.mga5.x86_64.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>TcType</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_TcType.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ghc-7.4.2: The GHC API</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">TcType</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Finding type instances
</a></li><li><a href="#g:2">Finding <a href="exact.html">exact</a> (non-dead) type variables
</a></li><li><a href="#g:3">Tidying type related things up for printing
</a></li></ul></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">type</span> <a href="#t:TcType">TcType</a> = <a href="TcType.html#t:Type">Type</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:TcSigmaType">TcSigmaType</a> = <a href="TcType.html#t:TcType">TcType</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:TcRhoType">TcRhoType</a> = <a href="TcType.html#t:TcType">TcType</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:TcTauType">TcTauType</a> = <a href="TcType.html#t:TcType">TcType</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:TcPredType">TcPredType</a> = <a href="TcType.html#t:PredType">PredType</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:TcThetaType">TcThetaType</a> = <a href="TcType.html#t:ThetaType">ThetaType</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:TcTyVar">TcTyVar</a> = <a href="Var.html#t:TyVar">TyVar</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:TcTyVarSet">TcTyVarSet</a> = <a href="VarSet.html#t:TyVarSet">TyVarSet</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:TcKind">TcKind</a> = <a href="TcType.html#t:Kind">Kind</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:TcCoVar">TcCoVar</a> = <a href="Var.html#t:CoVar">CoVar</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:UserTypeCtxt">UserTypeCtxt</a> <ul class="subs"><li>= <a href="#v:FunSigCtxt">FunSigCtxt</a> <a href="Name.html#t:Name">Name</a>  </li><li>| <a href="#v:InfSigCtxt">InfSigCtxt</a> <a href="Name.html#t:Name">Name</a>  </li><li>| <a href="#v:ExprSigCtxt">ExprSigCtxt</a>  </li><li>| <a href="#v:ConArgCtxt">ConArgCtxt</a> <a href="Name.html#t:Name">Name</a>  </li><li>| <a href="#v:TySynCtxt">TySynCtxt</a> <a href="Name.html#t:Name">Name</a>  </li><li>| <a href="#v:LamPatSigCtxt">LamPatSigCtxt</a>  </li><li>| <a href="#v:BindPatSigCtxt">BindPatSigCtxt</a>  </li><li>| <a href="#v:ResSigCtxt">ResSigCtxt</a>  </li><li>| <a href="#v:ForSigCtxt">ForSigCtxt</a> <a href="Name.html#t:Name">Name</a>  </li><li>| <a href="#v:DefaultDeclCtxt">DefaultDeclCtxt</a>  </li><li>| <a href="#v:InstDeclCtxt">InstDeclCtxt</a>  </li><li>| <a href="#v:SpecInstCtxt">SpecInstCtxt</a>  </li><li>| <a href="#v:ThBrackCtxt">ThBrackCtxt</a>  </li><li>| <a href="#v:GenSigCtxt">GenSigCtxt</a>  </li><li>| <a href="#v:GhciCtxt">GhciCtxt</a>  </li><li>| <a href="#v:ClassSCCtxt">ClassSCCtxt</a> <a href="Name.html#t:Name">Name</a>  </li><li>| <a href="#v:SigmaCtxt">SigmaCtxt</a>  </li><li>| <a href="#v:DataTyCtxt">DataTyCtxt</a> <a href="Name.html#t:Name">Name</a>  </li></ul></li><li class="src short"><a href="#v:pprUserTypeCtxt">pprUserTypeCtxt</a> :: <a href="TcType.html#t:UserTypeCtxt">UserTypeCtxt</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:TcTyVarDetails">TcTyVarDetails</a> <ul class="subs"><li>= <a href="#v:SkolemTv">SkolemTv</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>  </li><li>| <a href="#v:RuntimeUnk">RuntimeUnk</a>  </li><li>| <a href="#v:FlatSkol">FlatSkol</a> <a href="TcType.html#t:TcType">TcType</a>  </li><li>| <a href="#v:MetaTv">MetaTv</a> <a href="TcType.html#t:MetaInfo">MetaInfo</a> (<a href="IOEnv.html#t:IORef">IORef</a> <a href="TcType.html#t:MetaDetails">MetaDetails</a>)  </li></ul></li><li class="src short"><a href="#v:pprTcTyVarDetails">pprTcTyVarDetails</a> :: <a href="TcType.html#t:TcTyVarDetails">TcTyVarDetails</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:vanillaSkolemTv">vanillaSkolemTv</a> :: <a href="TcType.html#t:TcTyVarDetails">TcTyVarDetails</a></li><li class="src short"><a href="#v:superSkolemTv">superSkolemTv</a> :: <a href="TcType.html#t:TcTyVarDetails">TcTyVarDetails</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:MetaDetails">MetaDetails</a> <ul class="subs"><li>= <a href="#v:Flexi">Flexi</a>  </li><li>| <a href="#v:Indirect">Indirect</a> <a href="TcType.html#t:TcType">TcType</a>  </li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:MetaInfo">MetaInfo</a> <ul class="subs"><li>= <a href="#v:TauTv">TauTv</a>  </li><li>| <a href="#v:SigTv">SigTv</a>  </li><li>| <a href="#v:TcsTv">TcsTv</a>  </li></ul></li><li class="src short"><a href="#v:isImmutableTyVar">isImmutableTyVar</a> :: <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isSkolemTyVar">isSkolemTyVar</a> :: <a href="TcType.html#t:TcTyVar">TcTyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isMetaTyVar">isMetaTyVar</a> :: <a href="TcType.html#t:TcTyVar">TcTyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isMetaTyVarTy">isMetaTyVarTy</a> :: <a href="TcType.html#t:TcType">TcType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isTyVarTy">isTyVarTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isSigTyVar">isSigTyVar</a> :: <a href="Var.html#t:Var">Var</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isOverlappableTyVar">isOverlappableTyVar</a> :: <a href="TcType.html#t:TcTyVar">TcTyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isTyConableTyVar">isTyConableTyVar</a> :: <a href="TcType.html#t:TcTyVar">TcTyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isAmbiguousTyVar">isAmbiguousTyVar</a> :: <a href="TcType.html#t:TcTyVar">TcTyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:metaTvRef">metaTvRef</a> :: <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="IOEnv.html#t:IORef">IORef</a> <a href="TcType.html#t:MetaDetails">MetaDetails</a></li><li class="src short"><a href="#v:isFlexi">isFlexi</a> :: <a href="TcType.html#t:MetaDetails">MetaDetails</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isIndirect">isIndirect</a> :: <a href="TcType.html#t:MetaDetails">MetaDetails</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isRuntimeUnkSkol">isRuntimeUnkSkol</a> :: <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:mkPhiTy">mkPhiTy</a> :: [<a href="TcType.html#t:PredType">PredType</a>] -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:mkSigmaTy">mkSigmaTy</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:PredType">PredType</a>] -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:tcView">tcView</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:tcSplitForAllTys">tcSplitForAllTys</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; ([<a href="Var.html#t:TyVar">TyVar</a>], <a href="TcType.html#t:Type">Type</a>)</li><li class="src short"><a href="#v:tcSplitPhiTy">tcSplitPhiTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; (<a href="TcType.html#t:ThetaType">ThetaType</a>, <a href="TcType.html#t:Type">Type</a>)</li><li class="src short"><a href="#v:tcSplitPredFunTy_maybe">tcSplitPredFunTy_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="TcType.html#t:PredType">PredType</a>, <a href="TcType.html#t:Type">Type</a>)</li><li class="src short"><a href="#v:tcSplitFunTy_maybe">tcSplitFunTy_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="TcType.html#t:Type">Type</a>, <a href="TcType.html#t:Type">Type</a>)</li><li class="src short"><a href="#v:tcSplitFunTys">tcSplitFunTys</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; ([<a href="TcType.html#t:Type">Type</a>], <a href="TcType.html#t:Type">Type</a>)</li><li class="src short"><a href="#v:tcFunArgTy">tcFunArgTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:tcFunResultTy">tcFunResultTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:tcSplitFunTysN">tcSplitFunTysN</a> :: <a href="TcType.html#t:TcRhoType">TcRhoType</a> -&gt; <a href="BasicTypes.html#t:Arity">Arity</a> -&gt; ([<a href="TcType.html#t:TcSigmaType">TcSigmaType</a>], <a href="TcType.html#t:TcSigmaType">TcSigmaType</a>)</li><li class="src short"><a href="#v:tcSplitTyConApp">tcSplitTyConApp</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; (<a href="TyCon.html#t:TyCon">TyCon</a>, [<a href="TcType.html#t:Type">Type</a>])</li><li class="src short"><a href="#v:tcSplitTyConApp_maybe">tcSplitTyConApp_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="TyCon.html#t:TyCon">TyCon</a>, [<a href="TcType.html#t:Type">Type</a>])</li><li class="src short"><a href="#v:tcTyConAppTyCon">tcTyConAppTyCon</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TyCon.html#t:TyCon">TyCon</a></li><li class="src short"><a href="#v:tcTyConAppArgs">tcTyConAppArgs</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; [<a href="TcType.html#t:Type">Type</a>]</li><li class="src short"><a href="#v:tcSplitAppTy_maybe">tcSplitAppTy_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="TcType.html#t:Type">Type</a>, <a href="TcType.html#t:Type">Type</a>)</li><li class="src short"><a href="#v:tcSplitAppTy">tcSplitAppTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; (<a href="TcType.html#t:Type">Type</a>, <a href="TcType.html#t:Type">Type</a>)</li><li class="src short"><a href="#v:tcSplitAppTys">tcSplitAppTys</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; (<a href="TcType.html#t:Type">Type</a>, [<a href="TcType.html#t:Type">Type</a>])</li><li class="src short"><a href="#v:repSplitAppTy_maybe">repSplitAppTy_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="TcType.html#t:Type">Type</a>, <a href="TcType.html#t:Type">Type</a>)</li><li class="src short"><a href="#v:tcInstHeadTyNotSynonym">tcInstHeadTyNotSynonym</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:tcInstHeadTyAppAllTyVars">tcInstHeadTyAppAllTyVars</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:tcGetTyVar_maybe">tcGetTyVar_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Var.html#t:TyVar">TyVar</a></li><li class="src short"><a href="#v:tcGetTyVar">tcGetTyVar</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a></li><li class="src short"><a href="#v:tcSplitSigmaTy">tcSplitSigmaTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; ([<a href="Var.html#t:TyVar">TyVar</a>], <a href="TcType.html#t:ThetaType">ThetaType</a>, <a href="TcType.html#t:Type">Type</a>)</li><li class="src short"><a href="#v:tcDeepSplitSigmaTy_maybe">tcDeepSplitSigmaTy_maybe</a> :: <a href="TcType.html#t:TcSigmaType">TcSigmaType</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> ([<a href="TcType.html#t:TcType">TcType</a>], [<a href="Var.html#t:TyVar">TyVar</a>], <a href="TcType.html#t:ThetaType">ThetaType</a>, <a href="TcType.html#t:TcSigmaType">TcSigmaType</a>)</li><li class="src short"><a href="#v:eqType">eqType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:eqTypes">eqTypes</a> :: [<a href="TcType.html#t:Type">Type</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:eqPred">eqPred</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:cmpType">cmpType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></li><li class="src short"><a href="#v:cmpTypes">cmpTypes</a> :: [<a href="TcType.html#t:Type">Type</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></li><li class="src short"><a href="#v:cmpPred">cmpPred</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></li><li class="src short"><a href="#v:eqTypeX">eqTypeX</a> :: <a href="VarEnv.html#t:RnEnv2">RnEnv2</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:eqKind">eqKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isSigmaTy">isSigmaTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isOverloadedTy">isOverloadedTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isDoubleTy">isDoubleTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFloatTy">isFloatTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isIntTy">isIntTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isWordTy">isWordTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isStringTy">isStringTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isIntegerTy">isIntegerTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isBoolTy">isBoolTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isUnitTy">isUnitTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isCharTy">isCharTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isTauTy">isTauTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isTauTyCon">isTauTyCon</a> :: <a href="TyCon.html#t:TyCon">TyCon</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:tcIsTyVarTy">tcIsTyVarTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:tcIsForAllTy">tcIsForAllTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isSynFamilyTyConApp">isSynFamilyTyConApp</a> :: <a href="TcType.html#t:TcTauType">TcTauType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isPredTy">isPredTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isTyVarClassPred">isTyVarClassPred</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:shallowPredTypePredTree">shallowPredTypePredTree</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="Type.html#t:PredTree">PredTree</a></li><li class="src short"><a href="#v:deNoteType">deNoteType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:orphNamesOfType">orphNamesOfType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="NameSet.html#t:NameSet">NameSet</a></li><li class="src short"><a href="#v:orphNamesOfDFunHead">orphNamesOfDFunHead</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="NameSet.html#t:NameSet">NameSet</a></li><li class="src short"><a href="#v:orphNamesOfCo">orphNamesOfCo</a> :: <a href="Coercion.html#t:Coercion">Coercion</a> -&gt; <a href="NameSet.html#t:NameSet">NameSet</a></li><li class="src short"><a href="#v:getDFunTyKey">getDFunTyKey</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="OccName.html#t:OccName">OccName</a></li><li class="src short"><a href="#v:evVarPred_maybe">evVarPred_maybe</a> :: <a href="Var.html#t:EvVar">EvVar</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="TcType.html#t:PredType">PredType</a></li><li class="src short"><a href="#v:evVarPred">evVarPred</a> :: <a href="Var.html#t:EvVar">EvVar</a> -&gt; <a href="TcType.html#t:PredType">PredType</a></li><li class="src short"><a href="#v:mkMinimalBySCs">mkMinimalBySCs</a> :: [<a href="TcType.html#t:PredType">PredType</a>] -&gt; [<a href="TcType.html#t:PredType">PredType</a>]</li><li class="src short"><a href="#v:transSuperClasses">transSuperClasses</a> :: <a href="Class.html#t:Class">Class</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; [<a href="TcType.html#t:PredType">PredType</a>]</li><li class="src short"><a href="#v:immSuperClasses">immSuperClasses</a> :: <a href="Class.html#t:Class">Class</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; [<a href="TcType.html#t:PredType">PredType</a>]</li><li class="src short"><a href="#v:tcTyFamInsts">tcTyFamInsts</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; [(<a href="TyCon.html#t:TyCon">TyCon</a>, [<a href="TcType.html#t:Type">Type</a>])]</li><li class="src short"><a href="#v:exactTyVarsOfType">exactTyVarsOfType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="VarSet.html#t:TyVarSet">TyVarSet</a></li><li class="src short"><a href="#v:exactTyVarsOfTypes">exactTyVarsOfTypes</a> :: [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="VarSet.html#t:TyVarSet">TyVarSet</a></li><li class="src short"><a href="#v:tidyType">tidyType</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:tidyTypes">tidyTypes</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>]</li><li class="src short"><a href="#v:tidyOpenType">tidyOpenType</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; (<a href="VarEnv.html#t:TidyEnv">TidyEnv</a>, <a href="TcType.html#t:Type">Type</a>)</li><li class="src short"><a href="#v:tidyOpenTypes">tidyOpenTypes</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; (<a href="VarEnv.html#t:TidyEnv">TidyEnv</a>, [<a href="TcType.html#t:Type">Type</a>])</li><li class="src short"><a href="#v:tidyOpenKind">tidyOpenKind</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="TcType.html#t:Kind">Kind</a> -&gt; (<a href="VarEnv.html#t:TidyEnv">TidyEnv</a>, <a href="TcType.html#t:Kind">Kind</a>)</li><li class="src short"><a href="#v:tidyTyVarBndr">tidyTyVarBndr</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a> -&gt; (<a href="VarEnv.html#t:TidyEnv">TidyEnv</a>, <a href="Var.html#t:TyVar">TyVar</a>)</li><li class="src short"><a href="#v:tidyFreeTyVars">tidyFreeTyVars</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="VarSet.html#t:TyVarSet">TyVarSet</a> -&gt; <a href="VarEnv.html#t:TidyEnv">TidyEnv</a></li><li class="src short"><a href="#v:tidyOpenTyVar">tidyOpenTyVar</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a> -&gt; (<a href="VarEnv.html#t:TidyEnv">TidyEnv</a>, <a href="Var.html#t:TyVar">TyVar</a>)</li><li class="src short"><a href="#v:tidyOpenTyVars">tidyOpenTyVars</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; (<a href="VarEnv.html#t:TidyEnv">TidyEnv</a>, [<a href="Var.html#t:TyVar">TyVar</a>])</li><li class="src short"><a href="#v:tidyTopType">tidyTopType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:tidyKind">tidyKind</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a></li><li class="src short"><a href="#v:tidyCo">tidyCo</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="Coercion.html#t:Coercion">Coercion</a> -&gt; <a href="Coercion.html#t:Coercion">Coercion</a></li><li class="src short"><a href="#v:tidyCos">tidyCos</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; [<a href="Coercion.html#t:Coercion">Coercion</a>] -&gt; [<a href="Coercion.html#t:Coercion">Coercion</a>]</li><li class="src short"><a href="#v:isFFIArgumentTy">isFFIArgumentTy</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="ForeignCall.html#t:Safety">Safety</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFFIImportResultTy">isFFIImportResultTy</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFFIExportResultTy">isFFIExportResultTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFFIExternalTy">isFFIExternalTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFFIDynArgumentTy">isFFIDynArgumentTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFFIDynResultTy">isFFIDynResultTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFFIPrimArgumentTy">isFFIPrimArgumentTy</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFFIPrimResultTy">isFFIPrimResultTy</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFFILabelTy">isFFILabelTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFFIDotnetTy">isFFIDotnetTy</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFFIDotnetObjTy">isFFIDotnetObjTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFFITy">isFFITy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isFunPtrTy">isFunPtrTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:tcSplitIOType_maybe">tcSplitIOType_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="TyCon.html#t:TyCon">TyCon</a>, <a href="TcType.html#t:Type">Type</a>)</li><li class="src short"><span class="keyword">type</span> <a href="#t:Kind">Kind</a> = <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:typeKind">typeKind</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Kind">Kind</a></li><li class="src short"><a href="#v:unliftedTypeKind">unliftedTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a></li><li class="src short"><a href="#v:liftedTypeKind">liftedTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a></li><li class="src short"><a href="#v:argTypeKind">argTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a></li><li class="src short"><a href="#v:openTypeKind">openTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a></li><li class="src short"><a href="#v:constraintKind">constraintKind</a> :: <a href="TcType.html#t:Kind">Kind</a></li><li class="src short"><a href="#v:mkArrowKind">mkArrowKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a></li><li class="src short"><a href="#v:mkArrowKinds">mkArrowKinds</a> :: [<a href="TcType.html#t:Kind">Kind</a>] -&gt; <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a></li><li class="src short"><a href="#v:isLiftedTypeKind">isLiftedTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isUnliftedTypeKind">isUnliftedTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isSubOpenTypeKind">isSubOpenTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isSubArgTypeKind">isSubArgTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isSubKind">isSubKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:splitKindFunTys">splitKindFunTys</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; ([<a href="TcType.html#t:Kind">Kind</a>], <a href="TcType.html#t:Kind">Kind</a>)</li><li class="src short"><a href="#v:defaultKind">defaultKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a></li><li class="src short"><a href="#v:mkMetaKindVar">mkMetaKindVar</a> :: <a href="Unique.html#t:Unique">Unique</a> -&gt; <a href="IOEnv.html#t:IORef">IORef</a> <a href="TcType.html#t:MetaDetails">MetaDetails</a> -&gt; <a href="Type.html#t:MetaKindVar">MetaKindVar</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:Type">Type</a> </li><li class="src short"><span class="keyword">type</span> <a href="#t:PredType">PredType</a> = <a href="TcType.html#t:Type">Type</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:ThetaType">ThetaType</a> = [<a href="TcType.html#t:PredType">PredType</a>]</li><li class="src short"><a href="#v:mkForAllTy">mkForAllTy</a> :: <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:mkForAllTys">mkForAllTys</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:mkFunTy">mkFunTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:mkFunTys">mkFunTys</a> :: [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:zipFunTys">zipFunTys</a> :: <a href="Outputable.html#t:Outputable">Outputable</a> a =&gt; [a] -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; ([(a, <a href="TcType.html#t:Type">Type</a>)], <a href="TcType.html#t:Type">Type</a>)</li><li class="src short"><a href="#v:mkTyConApp">mkTyConApp</a> :: <a href="TyCon.html#t:TyCon">TyCon</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:mkAppTy">mkAppTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:mkAppTys">mkAppTys</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:applyTy">applyTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="Type.html#t:KindOrType">KindOrType</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:applyTys">applyTys</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; [<a href="Type.html#t:KindOrType">KindOrType</a>] -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:mkTyVarTy">mkTyVarTy</a> :: <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:mkTyVarTys">mkTyVarTys</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>]</li><li class="src short"><a href="#v:mkTyConTy">mkTyConTy</a> :: <a href="TyCon.html#t:TyCon">TyCon</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:isClassPred">isClassPred</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isEqPred">isEqPred</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isIPPred">isIPPred</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:mkClassPred">mkClassPred</a> :: <a href="Class.html#t:Class">Class</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:PredType">PredType</a></li><li class="src short"><a href="#v:mkIPPred">mkIPPred</a> :: <a href="BasicTypes.html#t:IPName">IPName</a> <a href="Name.html#t:Name">Name</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:PredType">PredType</a></li><li class="src short"><a href="#v:isDictLikeTy">isDictLikeTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:tcSplitDFunTy">tcSplitDFunTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; ([<a href="Var.html#t:TyVar">TyVar</a>], <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a>, <a href="Class.html#t:Class">Class</a>, [<a href="TcType.html#t:Type">Type</a>])</li><li class="src short"><a href="#v:tcSplitDFunHead">tcSplitDFunHead</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; (<a href="Class.html#t:Class">Class</a>, [<a href="TcType.html#t:Type">Type</a>])</li><li class="src short"><a href="#v:mkEqPred">mkEqPred</a> :: (<a href="TcType.html#t:Type">Type</a>, <a href="TcType.html#t:Type">Type</a>) -&gt; <a href="TcType.html#t:PredType">PredType</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:TvSubst">TvSubst</a>  = <a href="#v:TvSubst">TvSubst</a> <a href="VarEnv.html#t:InScopeSet">InScopeSet</a> <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:TvSubstEnv">TvSubstEnv</a> = <a href="VarEnv.html#t:TyVarEnv">TyVarEnv</a> <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:emptyTvSubst">emptyTvSubst</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a></li><li class="src short"><a href="#v:mkOpenTvSubst">mkOpenTvSubst</a> :: <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></li><li class="src short"><a href="#v:zipOpenTvSubst">zipOpenTvSubst</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></li><li class="src short"><a href="#v:zipTopTvSubst">zipTopTvSubst</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></li><li class="src short"><a href="#v:mkTopTvSubst">mkTopTvSubst</a> :: [(<a href="Var.html#t:TyVar">TyVar</a>, <a href="TcType.html#t:Type">Type</a>)] -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></li><li class="src short"><a href="#v:notElemTvSubst">notElemTvSubst</a> :: <a href="Var.html#t:CoVar">CoVar</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:unionTvSubst">unionTvSubst</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></li><li class="src short"><a href="#v:getTvSubstEnv">getTvSubstEnv</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a></li><li class="src short"><a href="#v:setTvSubstEnv">setTvSubstEnv</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></li><li class="src short"><a href="#v:getTvInScope">getTvInScope</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="VarEnv.html#t:InScopeSet">InScopeSet</a></li><li class="src short"><a href="#v:extendTvInScope">extendTvInScope</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="Var.html#t:Var">Var</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></li><li class="src short"><a href="#v:lookupTyVar">lookupTyVar</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:extendTvSubst">extendTvSubst</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></li><li class="src short"><a href="#v:substTyVarBndr">substTyVarBndr</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a> -&gt; (<a href="TcType.html#t:TvSubst">TvSubst</a>, <a href="Var.html#t:TyVar">TyVar</a>)</li><li class="src short"><a href="#v:extendTvSubstList">extendTvSubstList</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></li><li class="src short"><a href="#v:isInScope">isInScope</a> :: <a href="Var.html#t:Var">Var</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:mkTvSubst">mkTvSubst</a> :: <a href="VarEnv.html#t:InScopeSet">InScopeSet</a> -&gt; <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></li><li class="src short"><a href="#v:zipTyEnv">zipTyEnv</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a></li><li class="src short"><a href="#v:substTy">substTy</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:substTys">substTys</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>]</li><li class="src short"><a href="#v:substTyWith">substTyWith</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:substTheta">substTheta</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="TcType.html#t:ThetaType">ThetaType</a> -&gt; <a href="TcType.html#t:ThetaType">ThetaType</a></li><li class="src short"><a href="#v:substTyVar">substTyVar</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="TcType.html#t:Type">Type</a></li><li class="src short"><a href="#v:substTyVars">substTyVars</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>]</li><li class="src short"><a href="#v:isUnLiftedType">isUnLiftedType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isUnboxedTupleType">isUnboxedTupleType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isPrimitiveType">isPrimitiveType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:tyVarsOfType">tyVarsOfType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="VarSet.html#t:VarSet">VarSet</a></li><li class="src short"><a href="#v:tyVarsOfTypes">tyVarsOfTypes</a> :: [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="VarSet.html#t:TyVarSet">TyVarSet</a></li><li class="src short"><a href="#v:tcTyVarsOfType">tcTyVarsOfType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:TcTyVarSet">TcTyVarSet</a></li><li class="src short"><a href="#v:tcTyVarsOfTypes">tcTyVarsOfTypes</a> :: [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="VarSet.html#t:TyVarSet">TyVarSet</a></li><li class="src short"><a href="#v:pprKind">pprKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:pprParendKind">pprParendKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:pprType">pprType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:pprParendType">pprParendType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:pprTypeApp">pprTypeApp</a> :: <a href="Name.html#t:NamedThing">NamedThing</a> a =&gt; a -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:pprTyThingCategory">pprTyThingCategory</a> :: <a href="Type.html#t:TyThing">TyThing</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:pprTheta">pprTheta</a> :: <a href="TcType.html#t:ThetaType">ThetaType</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:pprThetaArrowTy">pprThetaArrowTy</a> :: <a href="TcType.html#t:ThetaType">ThetaType</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:pprClassPred">pprClassPred</a> :: <a href="Class.html#t:Class">Class</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TcType" class="def">TcType</a> = <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TcSigmaType" class="def">TcSigmaType</a> = <a href="TcType.html#t:TcType">TcType</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TcRhoType" class="def">TcRhoType</a> = <a href="TcType.html#t:TcType">TcType</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TcTauType" class="def">TcTauType</a> = <a href="TcType.html#t:TcType">TcType</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TcPredType" class="def">TcPredType</a> = <a href="TcType.html#t:PredType">PredType</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TcThetaType" class="def">TcThetaType</a> = <a href="TcType.html#t:ThetaType">ThetaType</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TcTyVar" class="def">TcTyVar</a> = <a href="Var.html#t:TyVar">TyVar</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TcTyVarSet" class="def">TcTyVarSet</a> = <a href="VarSet.html#t:TyVarSet">TyVarSet</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TcKind" class="def">TcKind</a> = <a href="TcType.html#t:Kind">Kind</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TcCoVar" class="def">TcCoVar</a> = <a href="Var.html#t:CoVar">CoVar</a></p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:UserTypeCtxt" class="def">UserTypeCtxt</a>  </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:FunSigCtxt" class="def">FunSigCtxt</a> <a href="Name.html#t:Name">Name</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:InfSigCtxt" class="def">InfSigCtxt</a> <a href="Name.html#t:Name">Name</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:ExprSigCtxt" class="def">ExprSigCtxt</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:ConArgCtxt" class="def">ConArgCtxt</a> <a href="Name.html#t:Name">Name</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:TySynCtxt" class="def">TySynCtxt</a> <a href="Name.html#t:Name">Name</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:LamPatSigCtxt" class="def">LamPatSigCtxt</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:BindPatSigCtxt" class="def">BindPatSigCtxt</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:ResSigCtxt" class="def">ResSigCtxt</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:ForSigCtxt" class="def">ForSigCtxt</a> <a href="Name.html#t:Name">Name</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:DefaultDeclCtxt" class="def">DefaultDeclCtxt</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:InstDeclCtxt" class="def">InstDeclCtxt</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:SpecInstCtxt" class="def">SpecInstCtxt</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:ThBrackCtxt" class="def">ThBrackCtxt</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:GenSigCtxt" class="def">GenSigCtxt</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:GhciCtxt" class="def">GhciCtxt</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:ClassSCCtxt" class="def">ClassSCCtxt</a> <a href="Name.html#t:Name">Name</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:SigmaCtxt" class="def">SigmaCtxt</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:DataTyCtxt" class="def">DataTyCtxt</a> <a href="Name.html#t:Name">Name</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><a name="v:pprUserTypeCtxt" class="def">pprUserTypeCtxt</a> :: <a href="TcType.html#t:UserTypeCtxt">UserTypeCtxt</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:TcTyVarDetails" class="def">TcTyVarDetails</a>  </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:SkolemTv" class="def">SkolemTv</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:RuntimeUnk" class="def">RuntimeUnk</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:FlatSkol" class="def">FlatSkol</a> <a href="TcType.html#t:TcType">TcType</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:MetaTv" class="def">MetaTv</a> <a href="TcType.html#t:MetaInfo">MetaInfo</a> (<a href="IOEnv.html#t:IORef">IORef</a> <a href="TcType.html#t:MetaDetails">MetaDetails</a>)</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><a name="v:pprTcTyVarDetails" class="def">pprTcTyVarDetails</a> :: <a href="TcType.html#t:TcTyVarDetails">TcTyVarDetails</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:vanillaSkolemTv" class="def">vanillaSkolemTv</a> :: <a href="TcType.html#t:TcTyVarDetails">TcTyVarDetails</a></p></div><div class="top"><p class="src"><a name="v:superSkolemTv" class="def">superSkolemTv</a> :: <a href="TcType.html#t:TcTyVarDetails">TcTyVarDetails</a></p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:MetaDetails" class="def">MetaDetails</a>  </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Flexi" class="def">Flexi</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Indirect" class="def">Indirect</a> <a href="TcType.html#t:TcType">TcType</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:MetaDetails" class="caption collapser" onclick="toggleSection('i:MetaDetails')">Instances</p><div id="section.i:MetaDetails" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="TcType.html#t:MetaDetails">MetaDetails</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:MetaInfo" class="def">MetaInfo</a>  </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:TauTv" class="def">TauTv</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:SigTv" class="def">SigTv</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:TcsTv" class="def">TcsTv</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><a name="v:isImmutableTyVar" class="def">isImmutableTyVar</a> :: <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isSkolemTyVar" class="def">isSkolemTyVar</a> :: <a href="TcType.html#t:TcTyVar">TcTyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isMetaTyVar" class="def">isMetaTyVar</a> :: <a href="TcType.html#t:TcTyVar">TcTyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isMetaTyVarTy" class="def">isMetaTyVarTy</a> :: <a href="TcType.html#t:TcType">TcType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isTyVarTy" class="def">isTyVarTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isSigTyVar" class="def">isSigTyVar</a> :: <a href="Var.html#t:Var">Var</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isOverlappableTyVar" class="def">isOverlappableTyVar</a> :: <a href="TcType.html#t:TcTyVar">TcTyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isTyConableTyVar" class="def">isTyConableTyVar</a> :: <a href="TcType.html#t:TcTyVar">TcTyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isAmbiguousTyVar" class="def">isAmbiguousTyVar</a> :: <a href="TcType.html#t:TcTyVar">TcTyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:metaTvRef" class="def">metaTvRef</a> :: <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="IOEnv.html#t:IORef">IORef</a> <a href="TcType.html#t:MetaDetails">MetaDetails</a></p></div><div class="top"><p class="src"><a name="v:isFlexi" class="def">isFlexi</a> :: <a href="TcType.html#t:MetaDetails">MetaDetails</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isIndirect" class="def">isIndirect</a> :: <a href="TcType.html#t:MetaDetails">MetaDetails</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isRuntimeUnkSkol" class="def">isRuntimeUnkSkol</a> :: <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:mkPhiTy" class="def">mkPhiTy</a> :: [<a href="TcType.html#t:PredType">PredType</a>] -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><a name="v:mkSigmaTy" class="def">mkSigmaTy</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:PredType">PredType</a>] -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><a name="v:tcView" class="def">tcView</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="TcType.html#t:Type">Type</a></p><div class="doc"><p>Similar to <code><a href="Type.html#v:coreView">coreView</a></code>, but for the type checker, which just looks through synonyms
</p></div></div><div class="top"><p class="src"><a name="v:tcSplitForAllTys" class="def">tcSplitForAllTys</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; ([<a href="Var.html#t:TyVar">TyVar</a>], <a href="TcType.html#t:Type">Type</a>)</p></div><div class="top"><p class="src"><a name="v:tcSplitPhiTy" class="def">tcSplitPhiTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; (<a href="TcType.html#t:ThetaType">ThetaType</a>, <a href="TcType.html#t:Type">Type</a>)</p></div><div class="top"><p class="src"><a name="v:tcSplitPredFunTy_maybe" class="def">tcSplitPredFunTy_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="TcType.html#t:PredType">PredType</a>, <a href="TcType.html#t:Type">Type</a>)</p></div><div class="top"><p class="src"><a name="v:tcSplitFunTy_maybe" class="def">tcSplitFunTy_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="TcType.html#t:Type">Type</a>, <a href="TcType.html#t:Type">Type</a>)</p></div><div class="top"><p class="src"><a name="v:tcSplitFunTys" class="def">tcSplitFunTys</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; ([<a href="TcType.html#t:Type">Type</a>], <a href="TcType.html#t:Type">Type</a>)</p></div><div class="top"><p class="src"><a name="v:tcFunArgTy" class="def">tcFunArgTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><a name="v:tcFunResultTy" class="def">tcFunResultTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><a name="v:tcSplitFunTysN" class="def">tcSplitFunTysN</a> :: <a href="TcType.html#t:TcRhoType">TcRhoType</a> -&gt; <a href="BasicTypes.html#t:Arity">Arity</a> -&gt; ([<a href="TcType.html#t:TcSigmaType">TcSigmaType</a>], <a href="TcType.html#t:TcSigmaType">TcSigmaType</a>)</p></div><div class="top"><p class="src"><a name="v:tcSplitTyConApp" class="def">tcSplitTyConApp</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; (<a href="TyCon.html#t:TyCon">TyCon</a>, [<a href="TcType.html#t:Type">Type</a>])</p></div><div class="top"><p class="src"><a name="v:tcSplitTyConApp_maybe" class="def">tcSplitTyConApp_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="TyCon.html#t:TyCon">TyCon</a>, [<a href="TcType.html#t:Type">Type</a>])</p></div><div class="top"><p class="src"><a name="v:tcTyConAppTyCon" class="def">tcTyConAppTyCon</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TyCon.html#t:TyCon">TyCon</a></p></div><div class="top"><p class="src"><a name="v:tcTyConAppArgs" class="def">tcTyConAppArgs</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; [<a href="TcType.html#t:Type">Type</a>]</p></div><div class="top"><p class="src"><a name="v:tcSplitAppTy_maybe" class="def">tcSplitAppTy_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="TcType.html#t:Type">Type</a>, <a href="TcType.html#t:Type">Type</a>)</p></div><div class="top"><p class="src"><a name="v:tcSplitAppTy" class="def">tcSplitAppTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; (<a href="TcType.html#t:Type">Type</a>, <a href="TcType.html#t:Type">Type</a>)</p></div><div class="top"><p class="src"><a name="v:tcSplitAppTys" class="def">tcSplitAppTys</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; (<a href="TcType.html#t:Type">Type</a>, [<a href="TcType.html#t:Type">Type</a>])</p></div><div class="top"><p class="src"><a name="v:repSplitAppTy_maybe" class="def">repSplitAppTy_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="TcType.html#t:Type">Type</a>, <a href="TcType.html#t:Type">Type</a>)</p><div class="doc"><p>Does the AppTy split as in <code><a href="Type.html#v:splitAppTy_maybe">splitAppTy_maybe</a></code>, but assumes that 
 any Core view stuff is already done
</p></div></div><div class="top"><p class="src"><a name="v:tcInstHeadTyNotSynonym" class="def">tcInstHeadTyNotSynonym</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:tcInstHeadTyAppAllTyVars" class="def">tcInstHeadTyAppAllTyVars</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:tcGetTyVar_maybe" class="def">tcGetTyVar_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Var.html#t:TyVar">TyVar</a></p></div><div class="top"><p class="src"><a name="v:tcGetTyVar" class="def">tcGetTyVar</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a></p></div><div class="top"><p class="src"><a name="v:tcSplitSigmaTy" class="def">tcSplitSigmaTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; ([<a href="Var.html#t:TyVar">TyVar</a>], <a href="TcType.html#t:ThetaType">ThetaType</a>, <a href="TcType.html#t:Type">Type</a>)</p></div><div class="top"><p class="src"><a name="v:tcDeepSplitSigmaTy_maybe" class="def">tcDeepSplitSigmaTy_maybe</a> :: <a href="TcType.html#t:TcSigmaType">TcSigmaType</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> ([<a href="TcType.html#t:TcType">TcType</a>], [<a href="Var.html#t:TyVar">TyVar</a>], <a href="TcType.html#t:ThetaType">ThetaType</a>, <a href="TcType.html#t:TcSigmaType">TcSigmaType</a>)</p></div><div class="top"><p class="src"><a name="v:eqType" class="def">eqType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Type equality on source types. Does not look through <code>newtypes</code> or 
 <code><a href="TcType.html#t:PredType">PredType</a></code>s, but it does look through type synonyms.
</p></div></div><div class="top"><p class="src"><a name="v:eqTypes" class="def">eqTypes</a> :: [<a href="TcType.html#t:Type">Type</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:eqPred" class="def">eqPred</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:cmpType" class="def">cmpType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></p></div><div class="top"><p class="src"><a name="v:cmpTypes" class="def">cmpTypes</a> :: [<a href="TcType.html#t:Type">Type</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></p></div><div class="top"><p class="src"><a name="v:cmpPred" class="def">cmpPred</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></p></div><div class="top"><p class="src"><a name="v:eqTypeX" class="def">eqTypeX</a> :: <a href="VarEnv.html#t:RnEnv2">RnEnv2</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:eqKind" class="def">eqKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isSigmaTy" class="def">isSigmaTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isOverloadedTy" class="def">isOverloadedTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isDoubleTy" class="def">isDoubleTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFloatTy" class="def">isFloatTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isIntTy" class="def">isIntTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isWordTy" class="def">isWordTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isStringTy" class="def">isStringTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isIntegerTy" class="def">isIntegerTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isBoolTy" class="def">isBoolTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isUnitTy" class="def">isUnitTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isCharTy" class="def">isCharTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isTauTy" class="def">isTauTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isTauTyCon" class="def">isTauTyCon</a> :: <a href="TyCon.html#t:TyCon">TyCon</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:tcIsTyVarTy" class="def">tcIsTyVarTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:tcIsForAllTy" class="def">tcIsForAllTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isSynFamilyTyConApp" class="def">isSynFamilyTyConApp</a> :: <a href="TcType.html#t:TcTauType">TcTauType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isPredTy" class="def">isPredTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isTyVarClassPred" class="def">isTyVarClassPred</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:shallowPredTypePredTree" class="def">shallowPredTypePredTree</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="Type.html#t:PredTree">PredTree</a></p><div class="doc"><p>Like <code><a href="Type.html#v:classifyPredType">classifyPredType</a></code> but doesn't look through type synonyms.
 Used to check that programs only use <a href="simple.html">simple</a> contexts without any
 synonyms in them.
</p></div></div><div class="top"><p class="src"><a name="v:deNoteType" class="def">deNoteType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><a name="v:orphNamesOfType" class="def">orphNamesOfType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="NameSet.html#t:NameSet">NameSet</a></p></div><div class="top"><p class="src"><a name="v:orphNamesOfDFunHead" class="def">orphNamesOfDFunHead</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="NameSet.html#t:NameSet">NameSet</a></p></div><div class="top"><p class="src"><a name="v:orphNamesOfCo" class="def">orphNamesOfCo</a> :: <a href="Coercion.html#t:Coercion">Coercion</a> -&gt; <a href="NameSet.html#t:NameSet">NameSet</a></p></div><div class="top"><p class="src"><a name="v:getDFunTyKey" class="def">getDFunTyKey</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="OccName.html#t:OccName">OccName</a></p></div><div class="top"><p class="src"><a name="v:evVarPred_maybe" class="def">evVarPred_maybe</a> :: <a href="Var.html#t:EvVar">EvVar</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="TcType.html#t:PredType">PredType</a></p></div><div class="top"><p class="src"><a name="v:evVarPred" class="def">evVarPred</a> :: <a href="Var.html#t:EvVar">EvVar</a> -&gt; <a href="TcType.html#t:PredType">PredType</a></p></div><div class="top"><p class="src"><a name="v:mkMinimalBySCs" class="def">mkMinimalBySCs</a> :: [<a href="TcType.html#t:PredType">PredType</a>] -&gt; [<a href="TcType.html#t:PredType">PredType</a>]</p></div><div class="top"><p class="src"><a name="v:transSuperClasses" class="def">transSuperClasses</a> :: <a href="Class.html#t:Class">Class</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; [<a href="TcType.html#t:PredType">PredType</a>]</p></div><div class="top"><p class="src"><a name="v:immSuperClasses" class="def">immSuperClasses</a> :: <a href="Class.html#t:Class">Class</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; [<a href="TcType.html#t:PredType">PredType</a>]</p></div><h1 id="g:1">Finding type instances
</h1><div class="top"><p class="src"><a name="v:tcTyFamInsts" class="def">tcTyFamInsts</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; [(<a href="TyCon.html#t:TyCon">TyCon</a>, [<a href="TcType.html#t:Type">Type</a>])]</p><div class="doc"><p>Finds type family instances occuring in a type after expanding synonyms.
</p></div></div><h1 id="g:2">Finding <a href="exact.html">exact</a> (non-dead) type variables
</h1><div class="top"><p class="src"><a name="v:exactTyVarsOfType" class="def">exactTyVarsOfType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="VarSet.html#t:TyVarSet">TyVarSet</a></p></div><div class="top"><p class="src"><a name="v:exactTyVarsOfTypes" class="def">exactTyVarsOfTypes</a> :: [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="VarSet.html#t:TyVarSet">TyVarSet</a></p></div><h1 id="g:3">Tidying type related things up for printing
</h1><div class="top"><p class="src"><a name="v:tidyType" class="def">tidyType</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><a name="v:tidyTypes" class="def">tidyTypes</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>]</p></div><div class="top"><p class="src"><a name="v:tidyOpenType" class="def">tidyOpenType</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; (<a href="VarEnv.html#t:TidyEnv">TidyEnv</a>, <a href="TcType.html#t:Type">Type</a>)</p><div class="doc"><p>Grabs the free type variables, tidies them
 and then uses <code><a href="TcType.html#v:tidyType">tidyType</a></code> to work over the type itself
</p></div></div><div class="top"><p class="src"><a name="v:tidyOpenTypes" class="def">tidyOpenTypes</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; (<a href="VarEnv.html#t:TidyEnv">TidyEnv</a>, [<a href="TcType.html#t:Type">Type</a>])</p></div><div class="top"><p class="src"><a name="v:tidyOpenKind" class="def">tidyOpenKind</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="TcType.html#t:Kind">Kind</a> -&gt; (<a href="VarEnv.html#t:TidyEnv">TidyEnv</a>, <a href="TcType.html#t:Kind">Kind</a>)</p></div><div class="top"><p class="src"><a name="v:tidyTyVarBndr" class="def">tidyTyVarBndr</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a> -&gt; (<a href="VarEnv.html#t:TidyEnv">TidyEnv</a>, <a href="Var.html#t:TyVar">TyVar</a>)</p><div 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></div></div><div class="top"><p class="src"><a name="v:tidyFreeTyVars" class="def">tidyFreeTyVars</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="VarSet.html#t:TyVarSet">TyVarSet</a> -&gt; <a href="VarEnv.html#t:TidyEnv">TidyEnv</a></p><div class="doc"><p>Add the free <code><a href="Var.html#t:TyVar">TyVar</a></code>s to the env in tidy form,
 so that we can tidy the type they are free in
</p></div></div><div class="top"><p class="src"><a name="v:tidyOpenTyVar" class="def">tidyOpenTyVar</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a> -&gt; (<a href="VarEnv.html#t:TidyEnv">TidyEnv</a>, <a href="Var.html#t:TyVar">TyVar</a>)</p><div class="doc"><p>Treat a new <code><a href="Var.html#t:TyVar">TyVar</a></code> as a binder, and give it a fresh tidy name
 using the environment if one has not already been allocated. See
 also <code><a href="TcType.html#v:tidyTyVarBndr">tidyTyVarBndr</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:tidyOpenTyVars" class="def">tidyOpenTyVars</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; (<a href="VarEnv.html#t:TidyEnv">TidyEnv</a>, [<a href="Var.html#t:TyVar">TyVar</a>])</p></div><div class="top"><p class="src"><a name="v:tidyTopType" class="def">tidyTopType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p><div class="doc"><p>Calls <code><a href="TcType.html#v:tidyType">tidyType</a></code> on a top-level type (i.e. with an empty tidying environment)
</p></div></div><div class="top"><p class="src"><a name="v:tidyKind" class="def">tidyKind</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a></p></div><div class="top"><p class="src"><a name="v:tidyCo" class="def">tidyCo</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; <a href="Coercion.html#t:Coercion">Coercion</a> -&gt; <a href="Coercion.html#t:Coercion">Coercion</a></p></div><div class="top"><p class="src"><a name="v:tidyCos" class="def">tidyCos</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -&gt; [<a href="Coercion.html#t:Coercion">Coercion</a>] -&gt; [<a href="Coercion.html#t:Coercion">Coercion</a>]</p></div><div class="top"><p class="src"><a name="v:isFFIArgumentTy" class="def">isFFIArgumentTy</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="ForeignCall.html#t:Safety">Safety</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFFIImportResultTy" class="def">isFFIImportResultTy</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFFIExportResultTy" class="def">isFFIExportResultTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFFIExternalTy" class="def">isFFIExternalTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFFIDynArgumentTy" class="def">isFFIDynArgumentTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFFIDynResultTy" class="def">isFFIDynResultTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFFIPrimArgumentTy" class="def">isFFIPrimArgumentTy</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFFIPrimResultTy" class="def">isFFIPrimResultTy</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFFILabelTy" class="def">isFFILabelTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFFIDotnetTy" class="def">isFFIDotnetTy</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFFIDotnetObjTy" class="def">isFFIDotnetObjTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFFITy" class="def">isFFITy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isFunPtrTy" class="def">isFunPtrTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:tcSplitIOType_maybe" class="def">tcSplitIOType_maybe</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="TyCon.html#t:TyCon">TyCon</a>, <a href="TcType.html#t:Type">Type</a>)</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Kind" class="def">Kind</a> = <a href="TcType.html#t:Type">Type</a></p><div 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></div></div><div class="top"><p class="src"><a name="v:typeKind" class="def">typeKind</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Kind">Kind</a></p></div><div class="top"><p class="src"><a name="v:unliftedTypeKind" class="def">unliftedTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a></p><div class="doc"><p>See <a href="Type.html#kind_subtyping">Type</a> for details of the distinction between these <code><a href="TcType.html#t:Kind">Kind</a></code>s
</p></div></div><div class="top"><p class="src"><a name="v:liftedTypeKind" class="def">liftedTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a></p><div class="doc"><p>See <a href="Type.html#kind_subtyping">Type</a> for details of the distinction between these <code><a href="TcType.html#t:Kind">Kind</a></code>s
</p></div></div><div class="top"><p class="src"><a name="v:argTypeKind" class="def">argTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a></p><div class="doc"><p>See <a href="Type.html#kind_subtyping">Type</a> for details of the distinction between these <code><a href="TcType.html#t:Kind">Kind</a></code>s
</p></div></div><div class="top"><p class="src"><a name="v:openTypeKind" class="def">openTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a></p><div class="doc"><p>See <a href="Type.html#kind_subtyping">Type</a> for details of the distinction between these <code><a href="TcType.html#t:Kind">Kind</a></code>s
</p></div></div><div class="top"><p class="src"><a name="v:constraintKind" class="def">constraintKind</a> :: <a href="TcType.html#t:Kind">Kind</a></p><div class="doc"><p>See <a href="Type.html#kind_subtyping">Type</a> for details of the distinction between these <code><a href="TcType.html#t:Kind">Kind</a></code>s
</p></div></div><div class="top"><p class="src"><a name="v:mkArrowKind" class="def">mkArrowKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a></p><div class="doc"><p>Given two kinds <code>k1</code> and <code>k2</code>, creates the <code><a href="TcType.html#t:Kind">Kind</a></code> <code>k1 -&gt; k2</code>
</p></div></div><div class="top"><p class="src"><a name="v:mkArrowKinds" class="def">mkArrowKinds</a> :: [<a href="TcType.html#t:Kind">Kind</a>] -&gt; <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a></p><div class="doc"><p>Iterated application of <code><a href="TcType.html#v:mkArrowKind">mkArrowKind</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:isLiftedTypeKind" class="def">isLiftedTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isUnliftedTypeKind" class="def">isUnliftedTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>See <a href="Type.html#kind_subtyping">Type</a> for details of the distinction between these <code><a href="TcType.html#t:Kind">Kind</a></code>s
</p></div></div><div class="top"><p class="src"><a name="v:isSubOpenTypeKind" class="def">isSubOpenTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>True of any sub-kind of OpenTypeKind
</p><p>True of any sub-kind of OpenTypeKind
</p></div></div><div class="top"><p class="src"><a name="v:isSubArgTypeKind" class="def">isSubArgTypeKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>True of any sub-kind of ArgTypeKind 
</p></div></div><div class="top"><p class="src"><a name="v:isSubKind" class="def">isSubKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:splitKindFunTys" class="def">splitKindFunTys</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; ([<a href="TcType.html#t:Kind">Kind</a>], <a href="TcType.html#t:Kind">Kind</a>)</p><div class="doc"><p>Essentially <code>splitFunTys</code> on kinds
</p></div></div><div class="top"><p class="src"><a name="v:defaultKind" class="def">defaultKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="TcType.html#t:Kind">Kind</a></p><div class="doc"><p>Used when generalising: default OpenKind and ArgKind to *.
 See <a href="Type.html#kind_subtyping">Type</a> for more information on what that means
</p></div></div><div class="top"><p class="src"><a name="v:mkMetaKindVar" class="def">mkMetaKindVar</a> :: <a href="Unique.html#t:Unique">Unique</a> -&gt; <a href="IOEnv.html#t:IORef">IORef</a> <a href="TcType.html#t:MetaDetails">MetaDetails</a> -&gt; <a href="Type.html#t:MetaKindVar">MetaKindVar</a></p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Type" class="def">Type</a>  </p><div class="doc"><p>The key representation of types within the compiler
</p></div><div class="subs instances"><p id="control.i:Type" class="caption collapser" onclick="toggleSection('i:Type')">Instances</p><div id="section.i:Type" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Data.html#t:Data">Data</a> <a href="TcType.html#t:Type">Type</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="TcType.html#t:Type">Type</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="TcType.html#t:Type">Type</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:PredType" class="def">PredType</a> = <a href="TcType.html#t:Type">Type</a></p><div class="doc"><p>A type of the form <code>p</code> of kind <code>Constraint</code> represents a value whose type is
 the Haskell predicate <code>p</code>, where a predicate is what occurs before 
 the <code>=&gt;</code> in a Haskell type.
</p><p>We use <code><a href="TcType.html#t:PredType">PredType</a></code> as documentation to mark those types that we guarantee to have
 this kind.
</p><p>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 <code>Eq a</code> and <code>?x :: Int -&gt; Int</code> and <code>rl</code> are all called &quot;predicates&quot;
</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:ThetaType" class="def">ThetaType</a> = [<a href="TcType.html#t:PredType">PredType</a>]</p><div class="doc"><p>A collection of <code><a href="TcType.html#t:PredType">PredType</a></code>s
</p></div></div><div class="top"><p class="src"><a name="v:mkForAllTy" class="def">mkForAllTy</a> :: <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><a name="v:mkForAllTys" class="def">mkForAllTys</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p><div class="doc"><p>Wraps foralls over the type using the provided <code><a href="Var.html#t:TyVar">TyVar</a></code>s from left to right
</p></div></div><div class="top"><p class="src"><a name="v:mkFunTy" class="def">mkFunTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p><div class="doc"><p>Creates a function type from the given argument and result type
</p></div></div><div class="top"><p class="src"><a name="v:mkFunTys" class="def">mkFunTys</a> :: [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><a name="v:zipFunTys" class="def">zipFunTys</a> :: <a href="Outputable.html#t:Outputable">Outputable</a> a =&gt; [a] -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; ([(a, <a href="TcType.html#t:Type">Type</a>)], <a href="TcType.html#t:Type">Type</a>)</p><div class="doc"><p>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.
</p></div></div><div class="top"><p class="src"><a name="v:mkTyConApp" class="def">mkTyConApp</a> :: <a href="TyCon.html#t:TyCon">TyCon</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:Type">Type</a></p><div class="doc"><p>A key function: builds a <code>TyConApp</code> or <code>FunTy</code> as apppropriate to its arguments.
 Applies its arguments to the constructor from left to right
</p></div></div><div class="top"><p class="src"><a name="v:mkAppTy" class="def">mkAppTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p><div class="doc"><p>Applies a type to another, as in e.g. <code>k a</code>
</p></div></div><div class="top"><p class="src"><a name="v:mkAppTys" class="def">mkAppTys</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><a name="v:applyTy" class="def">applyTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="Type.html#t:KindOrType">KindOrType</a> -&gt; <a href="TcType.html#t:Type">Type</a></p><div 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 <code>applyTys type-of-f [t1,t2]</code> to compute the type of the expression.
 Panics if no application is possible.
</p></div></div><div class="top"><p class="src"><a name="v:applyTys" class="def">applyTys</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; [<a href="Type.html#t:KindOrType">KindOrType</a>] -&gt; <a href="TcType.html#t:Type">Type</a></p><div class="doc"><p>This function is interesting because:
</p><ol><li> The function may have more for-alls than there are args
</li><li> Less obviously, it may have fewer for-alls
</li></ol><p>For case 2. think of:
</p><pre> applyTys (forall a.a) [forall b.b, Int]
</pre><p>This really can happen, but only (I think) in situations involving
 undefined.  For example:
       undefined :: forall a. a
 Term: undefined <code>(forall b. b-&gt;b) </code>Int 
 This term should have type (Int -&gt; Int), but notice that
 there are more type args than foralls in <code><a href="../base-4.5.1.0/Prelude.html#v:undefined">undefined</a></code>s type.
</p></div></div><div class="top"><p class="src"><a name="v:mkTyVarTy" class="def">mkTyVarTy</a> :: <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><a name="v:mkTyVarTys" class="def">mkTyVarTys</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>]</p></div><div class="top"><p class="src"><a name="v:mkTyConTy" class="def">mkTyConTy</a> :: <a href="TyCon.html#t:TyCon">TyCon</a> -&gt; <a href="TcType.html#t:Type">Type</a></p><div class="doc"><p>Create the plain type constructor type which has been applied to no type arguments at all.
</p></div></div><div class="top"><p class="src"><a name="v:isClassPred" class="def">isClassPred</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isEqPred" class="def">isEqPred</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isIPPred" class="def">isIPPred</a> :: <a href="TcType.html#t:PredType">PredType</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:mkClassPred" class="def">mkClassPred</a> :: <a href="Class.html#t:Class">Class</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:PredType">PredType</a></p></div><div class="top"><p class="src"><a name="v:mkIPPred" class="def">mkIPPred</a> :: <a href="BasicTypes.html#t:IPName">IPName</a> <a href="Name.html#t:Name">Name</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:PredType">PredType</a></p></div><div class="top"><p class="src"><a name="v:isDictLikeTy" class="def">isDictLikeTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:tcSplitDFunTy" class="def">tcSplitDFunTy</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; ([<a href="Var.html#t:TyVar">TyVar</a>], <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a>, <a href="Class.html#t:Class">Class</a>, [<a href="TcType.html#t:Type">Type</a>])</p></div><div class="top"><p class="src"><a name="v:tcSplitDFunHead" class="def">tcSplitDFunHead</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; (<a href="Class.html#t:Class">Class</a>, [<a href="TcType.html#t:Type">Type</a>])</p></div><div class="top"><p class="src"><a name="v:mkEqPred" class="def">mkEqPred</a> :: (<a href="TcType.html#t:Type">Type</a>, <a href="TcType.html#t:Type">Type</a>) -&gt; <a href="TcType.html#t:PredType">PredType</a></p><div class="doc"><p>Creates a type equality predicate
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:TvSubst" class="def">TvSubst</a>  </p><div class="doc"><p>Type substitution
</p><p><a name="tvsubst_invariant"></a>
 The following invariants must hold of a <code><a href="TcType.html#t:TvSubst">TvSubst</a></code>:
</p><ol><li> The in-scope set is needed <em>only</em> to
 guide the generation of fresh uniques
</li><li> In particular, the <em>kind</em> of the type variables in 
 the in-scope set is not relevant
</li><li> The substition is only applied ONCE! This is because
 in general such application will not reached a fixed point.
</li></ol></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:TvSubst" class="def">TvSubst</a> <a href="VarEnv.html#t:InScopeSet">InScopeSet</a> <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:TvSubst" class="caption collapser" onclick="toggleSection('i:TvSubst')">Instances</p><div id="section.i:TvSubst" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="TcType.html#t:TvSubst">TvSubst</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TvSubstEnv" class="def">TvSubstEnv</a> = <a href="VarEnv.html#t:TyVarEnv">TyVarEnv</a> <a href="TcType.html#t:Type">Type</a></p><div class="doc"><p>A substitition of <code><a href="TcType.html#t:Type">Type</a></code>s for <code><a href="Var.html#t:TyVar">TyVar</a></code>s
                 and <code><a href="TcType.html#t:Kind">Kind</a></code>s for <code><a href="Var.html#t:KindVar">KindVar</a></code>s
</p></div></div><div class="top"><p class="src"><a name="v:emptyTvSubst" class="def">emptyTvSubst</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a></p></div><div class="top"><p class="src"><a name="v:mkOpenTvSubst" class="def">mkOpenTvSubst</a> :: <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></p><div class="doc"><p>Generates the in-scope set for the <code><a href="TcType.html#t:TvSubst">TvSubst</a></code> from the types in the incoming
 environment, hence <a href="open.html">open</a>
</p></div></div><div class="top"><p class="src"><a name="v:zipOpenTvSubst" class="def">zipOpenTvSubst</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></p><div class="doc"><p>Generates the in-scope set for the <code><a href="TcType.html#t:TvSubst">TvSubst</a></code> from the types in the incoming
 environment, hence <a href="open.html">open</a>
</p></div></div><div class="top"><p class="src"><a name="v:zipTopTvSubst" class="def">zipTopTvSubst</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></p></div><div class="top"><p class="src"><a name="v:mkTopTvSubst" class="def">mkTopTvSubst</a> :: [(<a href="Var.html#t:TyVar">TyVar</a>, <a href="TcType.html#t:Type">Type</a>)] -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></p><div class="doc"><p>Called when doing top-level substitutions. Here we expect that the 
 free vars of the range of the substitution will be empty.
</p></div></div><div class="top"><p class="src"><a name="v:notElemTvSubst" class="def">notElemTvSubst</a> :: <a href="Var.html#t:CoVar">CoVar</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:unionTvSubst" class="def">unionTvSubst</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></p></div><div class="top"><p class="src"><a name="v:getTvSubstEnv" class="def">getTvSubstEnv</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a></p></div><div class="top"><p class="src"><a name="v:setTvSubstEnv" class="def">setTvSubstEnv</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></p></div><div class="top"><p class="src"><a name="v:getTvInScope" class="def">getTvInScope</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="VarEnv.html#t:InScopeSet">InScopeSet</a></p></div><div class="top"><p class="src"><a name="v:extendTvInScope" class="def">extendTvInScope</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="Var.html#t:Var">Var</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></p></div><div class="top"><p class="src"><a name="v:lookupTyVar" class="def">lookupTyVar</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><a name="v:extendTvSubst" class="def">extendTvSubst</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></p></div><div class="top"><p class="src"><a name="v:substTyVarBndr" class="def">substTyVarBndr</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a> -&gt; (<a href="TcType.html#t:TvSubst">TvSubst</a>, <a href="Var.html#t:TyVar">TyVar</a>)</p></div><div class="top"><p class="src"><a name="v:extendTvSubstList" class="def">extendTvSubstList</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></p></div><div class="top"><p class="src"><a name="v:isInScope" class="def">isInScope</a> :: <a href="Var.html#t:Var">Var</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:mkTvSubst" class="def">mkTvSubst</a> :: <a href="VarEnv.html#t:InScopeSet">InScopeSet</a> -&gt; <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a> -&gt; <a href="TcType.html#t:TvSubst">TvSubst</a></p></div><div class="top"><p class="src"><a name="v:zipTyEnv" class="def">zipTyEnv</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a></p></div><div class="top"><p class="src"><a name="v:substTy" class="def">substTy</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p><div class="doc"><p>Substitute within a <code><a href="TcType.html#t:Type">Type</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:substTys" class="def">substTys</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>]</p><div class="doc"><p>Substitute within several <code><a href="TcType.html#t:Type">Type</a></code>s
</p></div></div><div class="top"><p class="src"><a name="v:substTyWith" class="def">substTyWith</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:Type">Type</a></p><div class="doc"><p>Type substitution making use of an <code><a href="TcType.html#t:TvSubst">TvSubst</a></code> that
 is assumed to be open, see <code><a href="TcType.html#v:zipOpenTvSubst">zipOpenTvSubst</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:substTheta" class="def">substTheta</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="TcType.html#t:ThetaType">ThetaType</a> -&gt; <a href="TcType.html#t:ThetaType">ThetaType</a></p><div class="doc"><p>Substitute within a <code><a href="TcType.html#t:ThetaType">ThetaType</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:substTyVar" class="def">substTyVar</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="TcType.html#t:Type">Type</a></p></div><div class="top"><p class="src"><a name="v:substTyVars" class="def">substTyVars</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -&gt; [<a href="Var.html#t:TyVar">TyVar</a>] -&gt; [<a href="TcType.html#t:Type">Type</a>]</p></div><div class="top"><p class="src"><a name="v:isUnLiftedType" class="def">isUnLiftedType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>See <a href="Type.html#type_classification">Type</a> for what an unlifted type is
</p></div></div><div class="top"><p class="src"><a name="v:isUnboxedTupleType" class="def">isUnboxedTupleType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isPrimitiveType" class="def">isPrimitiveType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>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
</p></div></div><div class="top"><p class="src"><a name="v:tyVarsOfType" class="def">tyVarsOfType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="VarSet.html#t:VarSet">VarSet</a></p><div class="doc"><p>NB: for type synonyms tyVarsOfType does <em>not</em> expand the synonym
 tyVarsOfType returns only the free *type* variables of a type
 For example, tyVarsOfType (a::k) returns {a}, not including the
 kind variable {k}
</p></div></div><div class="top"><p class="src"><a name="v:tyVarsOfTypes" class="def">tyVarsOfTypes</a> :: [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="VarSet.html#t:TyVarSet">TyVarSet</a></p></div><div class="top"><p class="src"><a name="v:tcTyVarsOfType" class="def">tcTyVarsOfType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="TcType.html#t:TcTyVarSet">TcTyVarSet</a></p></div><div class="top"><p class="src"><a name="v:tcTyVarsOfTypes" class="def">tcTyVarsOfTypes</a> :: [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="VarSet.html#t:TyVarSet">TyVarSet</a></p></div><div class="top"><p class="src"><a name="v:pprKind" class="def">pprKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:pprParendKind" class="def">pprParendKind</a> :: <a href="TcType.html#t:Kind">Kind</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:pprType" class="def">pprType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:pprParendType" class="def">pprParendType</a> :: <a href="TcType.html#t:Type">Type</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:pprTypeApp" class="def">pprTypeApp</a> :: <a href="Name.html#t:NamedThing">NamedThing</a> a =&gt; a -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:pprTyThingCategory" class="def">pprTyThingCategory</a> :: <a href="Type.html#t:TyThing">TyThing</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:pprTheta" class="def">pprTheta</a> :: <a href="TcType.html#t:ThetaType">ThetaType</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:pprThetaArrowTy" class="def">pprThetaArrowTy</a> :: <a href="TcType.html#t:ThetaType">ThetaType</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:pprClassPred" class="def">pprClassPred</a> :: <a href="Class.html#t:Class">Class</a> -&gt; [<a href="TcType.html#t:Type">Type</a>] -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.11.0</p></div></body></html>