<!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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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>] -> <a href="TcType.html#t:Type">Type</a> -> <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>] -> [<a href="TcType.html#t:PredType">PredType</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:tcView">tcView</a> :: <a href="TcType.html#t:Type">Type</a> -> <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> -> ([<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> -> (<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> -> <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> -> <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> -> ([<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> -> <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> -> <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> -> <a href="BasicTypes.html#t:Arity">Arity</a> -> ([<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> -> (<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> -> <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> -> <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> -> [<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> -> <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> -> (<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> -> (<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> -> <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> -> <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> -> <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> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> ([<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> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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>] -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="TcType.html#t:PredType">PredType</a> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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>] -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="TcType.html#t:PredType">PredType</a> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <a href="TcType.html#t:Kind">Kind</a> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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>] -> [<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> -> [<a href="TcType.html#t:Type">Type</a>] -> [<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> -> [<a href="TcType.html#t:Type">Type</a>] -> [<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> -> [(<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> -> <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>] -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> [<a href="TcType.html#t:Type">Type</a>] -> [<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> -> <a href="TcType.html#t:Type">Type</a> -> (<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> -> [<a href="TcType.html#t:Type">Type</a>] -> (<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> -> <a href="TcType.html#t:Kind">Kind</a> -> (<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> -> <a href="Var.html#t:TyVar">TyVar</a> -> (<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> -> <a href="VarSet.html#t:TyVarSet">TyVarSet</a> -> <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> -> <a href="Var.html#t:TyVar">TyVar</a> -> (<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> -> [<a href="Var.html#t:TyVar">TyVar</a>] -> (<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> -> <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> -> <a href="TcType.html#t:Kind">Kind</a> -> <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> -> <a href="Coercion.html#t:Coercion">Coercion</a> -> <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> -> [<a href="Coercion.html#t:Coercion">Coercion</a>] -> [<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> -> <a href="ForeignCall.html#t:Safety">Safety</a> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <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> -> <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> -> <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> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <a href="TcType.html#t:Kind">Kind</a> -> <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>] -> <a href="TcType.html#t:Kind">Kind</a> -> <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> -> <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> -> <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> -> <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> -> <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> -> <a href="TcType.html#t:Kind">Kind</a> -> <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> -> ([<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> -> <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> -> <a href="IOEnv.html#t:IORef">IORef</a> <a href="TcType.html#t:MetaDetails">MetaDetails</a> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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>] -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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>] -> <a href="TcType.html#t:Type">Type</a> -> <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 => [a] -> <a href="TcType.html#t:Type">Type</a> -> ([(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> -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="Type.html#t:KindOrType">KindOrType</a> -> <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> -> [<a href="Type.html#t:KindOrType">KindOrType</a>] -> <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> -> <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>] -> [<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> -> <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> -> <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> -> <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> -> <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> -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <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> -> ([<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> -> (<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>) -> <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> -> <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>] -> [<a href="TcType.html#t:Type">Type</a>] -> <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>] -> [<a href="TcType.html#t:Type">Type</a>] -> <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>)] -> <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> -> <a href="TcType.html#t:TvSubst">TvSubst</a> -> <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> -> <a href="TcType.html#t:TvSubst">TvSubst</a> -> <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> -> <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> -> <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a> -> <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> -> <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> -> <a href="Var.html#t:Var">Var</a> -> <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> -> <a href="Var.html#t:TyVar">TyVar</a> -> <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> -> <a href="Var.html#t:TyVar">TyVar</a> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <a href="Var.html#t:TyVar">TyVar</a> -> (<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> -> [<a href="Var.html#t:TyVar">TyVar</a>] -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="TcType.html#t:TvSubst">TvSubst</a> -> <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> -> <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a> -> <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>] -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> [<a href="TcType.html#t:Type">Type</a>] -> [<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>] -> [<a href="TcType.html#t:Type">Type</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:substTheta">substTheta</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -> <a href="TcType.html#t:ThetaType">ThetaType</a> -> <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> -> <a href="Var.html#t:TyVar">TyVar</a> -> <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> -> [<a href="Var.html#t:TyVar">TyVar</a>] -> [<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> -> <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> -> <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> -> <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> -> <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>] -> <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> -> <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>] -> <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> -> <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> -> <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> -> <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> -> <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 => a -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <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> -> <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> -> <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> -> [<a href="TcType.html#t:Type">Type</a>] -> <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"> </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"> </td></tr><tr><td class="src"><a name="v:ExprSigCtxt" class="def">ExprSigCtxt</a></td><td class="doc empty"> </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"> </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"> </td></tr><tr><td class="src"><a name="v:LamPatSigCtxt" class="def">LamPatSigCtxt</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:BindPatSigCtxt" class="def">BindPatSigCtxt</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:ResSigCtxt" class="def">ResSigCtxt</a></td><td class="doc empty"> </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"> </td></tr><tr><td class="src"><a name="v:DefaultDeclCtxt" class="def">DefaultDeclCtxt</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:InstDeclCtxt" class="def">InstDeclCtxt</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:SpecInstCtxt" class="def">SpecInstCtxt</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:ThBrackCtxt" class="def">ThBrackCtxt</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:GenSigCtxt" class="def">GenSigCtxt</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:GhciCtxt" class="def">GhciCtxt</a></td><td class="doc empty"> </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"> </td></tr><tr><td class="src"><a name="v:SigmaCtxt" class="def">SigmaCtxt</a></td><td class="doc empty"> </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"> </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> -> <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"> </td></tr><tr><td class="src"><a name="v:RuntimeUnk" class="def">RuntimeUnk</a></td><td class="doc empty"> </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"> </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"> </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> -> <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"> </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"> </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"> </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"> </td></tr><tr><td class="src"><a name="v:SigTv" class="def">SigTv</a></td><td class="doc empty"> </td></tr><tr><td class="src"><a name="v:TcsTv" class="def">TcsTv</a></td><td class="doc empty"> </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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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>] -> <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:mkSigmaTy" class="def">mkSigmaTy</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -> [<a href="TcType.html#t:PredType">PredType</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:tcView" class="def">tcView</a> :: <a href="TcType.html#t:Type">Type</a> -> <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> -> ([<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> -> (<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> -> <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> -> <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> -> ([<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> -> <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> -> <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> -> <a href="BasicTypes.html#t:Arity">Arity</a> -> ([<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> -> (<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> -> <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> -> <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> -> [<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> -> <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> -> (<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> -> (<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> -> <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> -> <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> -> <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> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> ([<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> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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>] -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="TcType.html#t:PredType">PredType</a> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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>] -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="TcType.html#t:PredType">PredType</a> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <a href="TcType.html#t:Kind">Kind</a> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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>] -> [<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> -> [<a href="TcType.html#t:Type">Type</a>] -> [<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> -> [<a href="TcType.html#t:Type">Type</a>] -> [<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> -> [(<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> -> <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>] -> <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> -> <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:tidyTypes" class="def">tidyTypes</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</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:tidyOpenType" class="def">tidyOpenType</a> :: <a href="VarEnv.html#t:TidyEnv">TidyEnv</a> -> <a href="TcType.html#t:Type">Type</a> -> (<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> -> [<a href="TcType.html#t:Type">Type</a>] -> (<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> -> <a href="TcType.html#t:Kind">Kind</a> -> (<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> -> <a href="Var.html#t:TyVar">TyVar</a> -> (<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> -> <a href="VarSet.html#t:TyVarSet">TyVarSet</a> -> <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> -> <a href="Var.html#t:TyVar">TyVar</a> -> (<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> -> [<a href="Var.html#t:TyVar">TyVar</a>] -> (<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> -> <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> -> <a href="TcType.html#t:Kind">Kind</a> -> <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> -> <a href="Coercion.html#t:Coercion">Coercion</a> -> <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> -> [<a href="Coercion.html#t:Coercion">Coercion</a>] -> [<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> -> <a href="ForeignCall.html#t:Safety">Safety</a> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <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> -> <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> -> <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> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <a href="TcType.html#t:Kind">Kind</a> -> <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 -> 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>] -> <a href="TcType.html#t:Kind">Kind</a> -> <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> -> <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> -> <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> -> <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> -> <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> -> <a href="TcType.html#t:Kind">Kind</a> -> <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> -> ([<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> -> <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> -> <a href="IOEnv.html#t:IORef">IORef</a> <a href="TcType.html#t:MetaDetails">MetaDetails</a> -> <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"> </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"> </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"> </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>=></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) => a -> Int g :: (?x :: Int -> Int) => a -> Int h :: (r\l) => {r} => {l::Int | r} </pre><p>Here the <code>Eq a</code> and <code>?x :: Int -> Int</code> and <code>rl</code> are all called "predicates" </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> -> <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:mkForAllTys" class="def">mkForAllTys</a> :: [<a href="Var.html#t:TyVar">TyVar</a>] -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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>] -> <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:zipFunTys" class="def">zipFunTys</a> :: <a href="Outputable.html#t:Outputable">Outputable</a> a => [a] -> <a href="TcType.html#t:Type">Type</a> -> ([(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> -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> [<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:applyTy" class="def">applyTy</a> :: <a href="TcType.html#t:Type">Type</a> -> <a href="Type.html#t:KindOrType">KindOrType</a> -> <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> -> [<a href="Type.html#t:KindOrType">KindOrType</a>] -> <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->b) </code>Int This term should have type (Int -> 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> -> <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>] -> [<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> -> <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> -> <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> -> <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> -> <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> -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <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> -> ([<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> -> (<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>) -> <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"> </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"> </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> -> <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>] -> [<a href="TcType.html#t:Type">Type</a>] -> <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>] -> [<a href="TcType.html#t:Type">Type</a>] -> <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>)] -> <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> -> <a href="TcType.html#t:TvSubst">TvSubst</a> -> <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> -> <a href="TcType.html#t:TvSubst">TvSubst</a> -> <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> -> <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> -> <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a> -> <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> -> <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> -> <a href="Var.html#t:Var">Var</a> -> <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> -> <a href="Var.html#t:TyVar">TyVar</a> -> <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> -> <a href="Var.html#t:TyVar">TyVar</a> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <a href="Var.html#t:TyVar">TyVar</a> -> (<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> -> [<a href="Var.html#t:TyVar">TyVar</a>] -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="TcType.html#t:TvSubst">TvSubst</a> -> <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> -> <a href="TcType.html#t:TvSubstEnv">TvSubstEnv</a> -> <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>] -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <a href="TcType.html#t:Type">Type</a> -> <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> -> [<a href="TcType.html#t:Type">Type</a>] -> [<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>] -> [<a href="TcType.html#t:Type">Type</a>] -> <a href="TcType.html#t:Type">Type</a> -> <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> -> <a href="TcType.html#t:ThetaType">ThetaType</a> -> <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> -> <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:substTyVars" class="def">substTyVars</a> :: <a href="TcType.html#t:TvSubst">TvSubst</a> -> [<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:isUnLiftedType" class="def">isUnLiftedType</a> :: <a href="TcType.html#t:Type">Type</a> -> <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> -> <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> -> <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> -> <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>] -> <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> -> <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>] -> <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> -> <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> -> <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> -> <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> -> <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 => a -> [<a href="TcType.html#t:Type">Type</a>] -> <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> -> <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> -> <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> -> <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> -> [<a href="TcType.html#t:Type">Type</a>] -> <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>