Sophie

Sophie

distrib > Mageia > 5 > i586 > media > core-release > by-pkgid > 6e204a966e8c42d976f99a1700ce5f20 > files > 2912

ghc-7.4.2-4.mga5.i586.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>IdInfo</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_IdInfo.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">IdInfo</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">The IdDetails type
</a></li><li><a href="#g:2">The IdInfo type
</a><ul><li><a href="#g:3">Zapping various forms of Info
</a></li><li><a href="#g:4">The ArityInfo type
</a></li><li><a href="#g:5">Demand and strictness Info
</a></li><li><a href="#g:6">Unfolding Info
</a></li><li><a href="#g:7">The InlinePragInfo type
</a></li><li><a href="#g:8">The OccInfo type
</a></li><li><a href="#g:9">The SpecInfo type
</a></li><li><a href="#g:10">The CAFInfo type
</a></li><li><a href="#g:11">The LBVarInfo type
</a></li><li><a href="#g:12">Tick-box Info
</a></li></ul></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">data</span>  <a href="#t:IdDetails">IdDetails</a> <ul class="subs"><li>= <a href="#v:VanillaId">VanillaId</a>  </li><li>| <a href="#v:RecSelId">RecSelId</a> { <ul class="subs"><li><a href="#v:sel_tycon">sel_tycon</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></li><li><a href="#v:sel_naughty">sel_naughty</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li></ul> }</li><li>| <a href="#v:DataConWorkId">DataConWorkId</a> <a href="DataCon.html#t:DataCon">DataCon</a>  </li><li>| <a href="#v:DataConWrapId">DataConWrapId</a> <a href="DataCon.html#t:DataCon">DataCon</a>  </li><li>| <a href="#v:ClassOpId">ClassOpId</a> <a href="Class.html#t:Class">Class</a>  </li><li>| <a href="#v:PrimOpId">PrimOpId</a> <a href="PrimOp.html#t:PrimOp">PrimOp</a>  </li><li>| <a href="#v:FCallId">FCallId</a> <a href="ForeignCall.html#t:ForeignCall">ForeignCall</a>  </li><li>| <a href="#v:TickBoxOpId">TickBoxOpId</a> <a href="IdInfo.html#t:TickBoxOp">TickBoxOp</a>  </li><li>| <a href="#v:DFunId">DFunId</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a>  </li></ul></li><li class="src short"><a href="#v:pprIdDetails">pprIdDetails</a> :: <a href="IdInfo.html#t:IdDetails">IdDetails</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:coVarDetails">coVarDetails</a> :: <a href="IdInfo.html#t:IdDetails">IdDetails</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:IdInfo">IdInfo</a> </li><li class="src short"><a href="#v:vanillaIdInfo">vanillaIdInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><a href="#v:noCafIdInfo">noCafIdInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><a href="#v:seqIdInfo">seqIdInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; ()</li><li class="src short"><a href="#v:megaSeqIdInfo">megaSeqIdInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; ()</li><li class="src short"><a href="#v:zapLamInfo">zapLamInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><a href="#v:zapDemandInfo">zapDemandInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><a href="#v:zapFragileInfo">zapFragileInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:ArityInfo">ArityInfo</a> = <a href="BasicTypes.html#t:Arity">Arity</a></li><li class="src short"><a href="#v:unknownArity">unknownArity</a> :: <a href="BasicTypes.html#t:Arity">Arity</a></li><li class="src short"><a href="#v:arityInfo">arityInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:ArityInfo">ArityInfo</a></li><li class="src short"><a href="#v:setArityInfo">setArityInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:ArityInfo">ArityInfo</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><a href="#v:ppArityInfo">ppArityInfo</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:strictnessInfo">strictnessInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Demand.html#t:StrictSig">StrictSig</a></li><li class="src short"><a href="#v:setStrictnessInfo">setStrictnessInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Demand.html#t:StrictSig">StrictSig</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><a href="#v:demandInfo">demandInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Demand.html#t:Demand">Demand</a></li><li class="src short"><a href="#v:setDemandInfo">setDemandInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Demand.html#t:Demand">Demand</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><a href="#v:pprStrictness">pprStrictness</a> :: <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Demand.html#t:StrictSig">StrictSig</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:unfoldingInfo">unfoldingInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="CoreSyn.html#t:Unfolding">Unfolding</a></li><li class="src short"><a href="#v:setUnfoldingInfo">setUnfoldingInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><a href="#v:setUnfoldingInfoLazily">setUnfoldingInfoLazily</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:InlinePragInfo">InlinePragInfo</a> = <a href="BasicTypes.html#t:InlinePragma">InlinePragma</a></li><li class="src short"><a href="#v:inlinePragInfo">inlinePragInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="BasicTypes.html#t:InlinePragma">InlinePragma</a></li><li class="src short"><a href="#v:setInlinePragInfo">setInlinePragInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="BasicTypes.html#t:InlinePragma">InlinePragma</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:OccInfo">OccInfo</a> <ul class="subs"><li>= <a href="#v:NoOccInfo">NoOccInfo</a>  </li><li>| <a href="#v:IAmDead">IAmDead</a>  </li><li>| <a href="#v:OneOcc">OneOcc</a> !<a href="IdInfo.html#t:InsideLam">InsideLam</a> !<a href="IdInfo.html#t:OneBranch">OneBranch</a> !<a href="BasicTypes.html#t:InterestingCxt">InterestingCxt</a>  </li><li>| <a href="#v:IAmALoopBreaker">IAmALoopBreaker</a> !RulesOnly  </li></ul></li><li class="src short"><a href="#v:isDeadOcc">isDeadOcc</a> :: <a href="IdInfo.html#t:OccInfo">OccInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isStrongLoopBreaker">isStrongLoopBreaker</a> :: <a href="IdInfo.html#t:OccInfo">OccInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isWeakLoopBreaker">isWeakLoopBreaker</a> :: <a href="IdInfo.html#t:OccInfo">OccInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:occInfo">occInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:OccInfo">OccInfo</a></li><li class="src short"><a href="#v:setOccInfo">setOccInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:OccInfo">OccInfo</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:InsideLam">InsideLam</a> = <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:OneBranch">OneBranch</a> = <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:insideLam">insideLam</a> :: <a href="IdInfo.html#t:InsideLam">InsideLam</a></li><li class="src short"><a href="#v:notInsideLam">notInsideLam</a> :: <a href="IdInfo.html#t:InsideLam">InsideLam</a></li><li class="src short"><a href="#v:oneBranch">oneBranch</a> :: <a href="IdInfo.html#t:OneBranch">OneBranch</a></li><li class="src short"><a href="#v:notOneBranch">notOneBranch</a> :: <a href="IdInfo.html#t:OneBranch">OneBranch</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:SpecInfo">SpecInfo</a>  = <a href="#v:SpecInfo">SpecInfo</a> [<a href="CoreSyn.html#t:CoreRule">CoreRule</a>] <a href="VarSet.html#t:VarSet">VarSet</a></li><li class="src short"><a href="#v:emptySpecInfo">emptySpecInfo</a> :: <a href="IdInfo.html#t:SpecInfo">SpecInfo</a></li><li class="src short"><a href="#v:isEmptySpecInfo">isEmptySpecInfo</a> :: <a href="IdInfo.html#t:SpecInfo">SpecInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:specInfoFreeVars">specInfoFreeVars</a> :: <a href="IdInfo.html#t:SpecInfo">SpecInfo</a> -&gt; <a href="VarSet.html#t:VarSet">VarSet</a></li><li class="src short"><a href="#v:specInfoRules">specInfoRules</a> :: <a href="IdInfo.html#t:SpecInfo">SpecInfo</a> -&gt; [<a href="CoreSyn.html#t:CoreRule">CoreRule</a>]</li><li class="src short"><a href="#v:seqSpecInfo">seqSpecInfo</a> :: <a href="IdInfo.html#t:SpecInfo">SpecInfo</a> -&gt; ()</li><li class="src short"><a href="#v:setSpecInfoHead">setSpecInfoHead</a> :: <a href="Name.html#t:Name">Name</a> -&gt; <a href="IdInfo.html#t:SpecInfo">SpecInfo</a> -&gt; <a href="IdInfo.html#t:SpecInfo">SpecInfo</a></li><li class="src short"><a href="#v:specInfo">specInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:SpecInfo">SpecInfo</a></li><li class="src short"><a href="#v:setSpecInfo">setSpecInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:SpecInfo">SpecInfo</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:CafInfo">CafInfo</a> <ul class="subs"><li>= <a href="#v:MayHaveCafRefs">MayHaveCafRefs</a>  </li><li>| <a href="#v:NoCafRefs">NoCafRefs</a>  </li></ul></li><li class="src short"><a href="#v:ppCafInfo">ppCafInfo</a> :: <a href="IdInfo.html#t:CafInfo">CafInfo</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:mayHaveCafRefs">mayHaveCafRefs</a> :: <a href="IdInfo.html#t:CafInfo">CafInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:cafInfo">cafInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:CafInfo">CafInfo</a></li><li class="src short"><a href="#v:setCafInfo">setCafInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:CafInfo">CafInfo</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:LBVarInfo">LBVarInfo</a> <ul class="subs"><li>= <a href="#v:NoLBVarInfo">NoLBVarInfo</a>  </li><li>| <a href="#v:IsOneShotLambda">IsOneShotLambda</a>  </li></ul></li><li class="src short"><a href="#v:noLBVarInfo">noLBVarInfo</a> :: <a href="IdInfo.html#t:LBVarInfo">LBVarInfo</a></li><li class="src short"><a href="#v:hasNoLBVarInfo">hasNoLBVarInfo</a> :: <a href="IdInfo.html#t:LBVarInfo">LBVarInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:lbvarInfo">lbvarInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:LBVarInfo">LBVarInfo</a></li><li class="src short"><a href="#v:setLBVarInfo">setLBVarInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:LBVarInfo">LBVarInfo</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:TickBoxOp">TickBoxOp</a>  = <a href="#v:TickBox">TickBox</a> <a href="Module.html#t:Module">Module</a> !<a href="IdInfo.html#t:TickBoxId">TickBoxId</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:TickBoxId">TickBoxId</a> = <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li></ul></div><div id="interface"><h1 id="g:1">The IdDetails type
</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:IdDetails" class="def">IdDetails</a>  </p><div class="doc"><p>The <code><a href="IdInfo.html#t:IdDetails">IdDetails</a></code> of an <code>Id</code> give stable, and necessary, 
 information about the Id. 
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:VanillaId" class="def">VanillaId</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:RecSelId" class="def">RecSelId</a></td><td class="doc"><p>The <code>Id</code> for a record selector
</p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:sel_tycon" class="def">sel_tycon</a> :: <a href="TyCon.html#t:TyCon">TyCon</a></dt><dd class="doc"><p>For a data type family, this is the <em>instance</em> <code><a href="TyCon.html#t:TyCon">TyCon</a></code>
   not the family <code><a href="TyCon.html#t:TyCon">TyCon</a></code>
</p></dd><dt class="src"><a name="v:sel_naughty" class="def">sel_naughty</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr><tr><td class="src"><a name="v:DataConWorkId" class="def">DataConWorkId</a> <a href="DataCon.html#t:DataCon">DataCon</a></td><td class="doc"><p>The <code>Id</code> is for a data constructor <em>worker</em>
</p></td></tr><tr><td class="src"><a name="v:DataConWrapId" class="def">DataConWrapId</a> <a href="DataCon.html#t:DataCon">DataCon</a></td><td class="doc"><p>The <code>Id</code> is for a data constructor <em>wrapper</em>
</p></td></tr><tr><td class="src"><a name="v:ClassOpId" class="def">ClassOpId</a> <a href="Class.html#t:Class">Class</a></td><td class="doc"><p>The <code>Id</code> is an superclass selector or class operation of a class
</p></td></tr><tr><td class="src"><a name="v:PrimOpId" class="def">PrimOpId</a> <a href="PrimOp.html#t:PrimOp">PrimOp</a></td><td class="doc"><p>The <code>Id</code> is for a primitive operator
</p></td></tr><tr><td class="src"><a name="v:FCallId" class="def">FCallId</a> <a href="ForeignCall.html#t:ForeignCall">ForeignCall</a></td><td class="doc"><p>The <code>Id</code> is for a foreign call
</p></td></tr><tr><td class="src"><a name="v:TickBoxOpId" class="def">TickBoxOpId</a> <a href="IdInfo.html#t:TickBoxOp">TickBoxOp</a></td><td class="doc"><p>The <code>Id</code> is for a HPC tick box (both traditional and binary)
</p></td></tr><tr><td class="src"><a name="v:DFunId" class="def">DFunId</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></td><td class="doc"><p>A dictionary function.
 Bool = True <a href="=">=</a> the class has only one method, so may be
                  implemented with a newtype, so it might be bad
                  to be strict on this dictionary
</p></td></tr></table></div><div class="subs instances"><p id="control.i:IdDetails" class="caption collapser" onclick="toggleSection('i:IdDetails')">Instances</p><div id="section.i:IdDetails" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="IdInfo.html#t:IdDetails">IdDetails</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:pprIdDetails" class="def">pprIdDetails</a> :: <a href="IdInfo.html#t:IdDetails">IdDetails</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:coVarDetails" class="def">coVarDetails</a> :: <a href="IdInfo.html#t:IdDetails">IdDetails</a></p></div><h1 id="g:2">The IdInfo type
</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:IdInfo" class="def">IdInfo</a>  </p><div class="doc"><p>An <code><a href="IdInfo.html#t:IdInfo">IdInfo</a></code> gives <em>optional</em> information about an <code>Id</code>.  If
 present it never lies, but it may not be present, in which case there
 is always a conservative assumption which can be made.
</p><p>Two <code>Id</code>s may have different info even though they have the same
 <code>Unique</code> (and are hence the same <code>Id</code>); for example, one might lack
 the properties attached to the other.
</p><p>The <code><a href="IdInfo.html#t:IdInfo">IdInfo</a></code> gives information about the value, or definition, of the
 <code>Id</code>.  It does not contain information about the <code>Id'</code>s usage,
 except for <code><a href="IdInfo.html#v:demandInfo">demandInfo</a></code> and <code><a href="IdInfo.html#v:lbvarInfo">lbvarInfo</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:vanillaIdInfo" class="def">vanillaIdInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a></p><div class="doc"><p>Basic <code><a href="IdInfo.html#t:IdInfo">IdInfo</a></code> that carries no useful information whatsoever
</p></div></div><div class="top"><p class="src"><a name="v:noCafIdInfo" class="def">noCafIdInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a></p><div class="doc"><p>More informative <code><a href="IdInfo.html#t:IdInfo">IdInfo</a></code> we can use when we know the <code>Id</code> has no CAF references
</p></div></div><div class="top"><p class="src"><a name="v:seqIdInfo" class="def">seqIdInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; ()</p><div class="doc"><p>Just evaluate the <code><a href="IdInfo.html#t:IdInfo">IdInfo</a></code> to WHNF
</p></div></div><div class="top"><p class="src"><a name="v:megaSeqIdInfo" class="def">megaSeqIdInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; ()</p><div class="doc"><p>Evaluate all the fields of the <code><a href="IdInfo.html#t:IdInfo">IdInfo</a></code> that are generally demanded by the
 compiler
</p></div></div><h2 id="g:3">Zapping various forms of Info
</h2><div class="top"><p class="src"><a name="v:zapLamInfo" class="def">zapLamInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="IdInfo.html#t:IdInfo">IdInfo</a></p><div class="doc"><p>This is used to remove information on lambda binders that we have
 setup as part of a lambda group, assuming they will be applied all at once,
 but turn out to be part of an unsaturated lambda as in e.g:
</p><pre> (\x1. \x2. e) arg1
</pre></div></div><div class="top"><p class="src"><a name="v:zapDemandInfo" class="def">zapDemandInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="IdInfo.html#t:IdInfo">IdInfo</a></p><div class="doc"><p>Remove demand info on the <code><a href="IdInfo.html#t:IdInfo">IdInfo</a></code> if it is present, otherwise return <code>Nothing</code>
</p></div></div><div class="top"><p class="src"><a name="v:zapFragileInfo" class="def">zapFragileInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="IdInfo.html#t:IdInfo">IdInfo</a></p><div class="doc"><p>Zap info that depends on free variables
</p></div></div><h2 id="g:4">The ArityInfo type
</h2><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:ArityInfo" class="def">ArityInfo</a> = <a href="BasicTypes.html#t:Arity">Arity</a></p><div class="doc"><p>An <code><a href="IdInfo.html#t:ArityInfo">ArityInfo</a></code> of <code>n</code> tells us that partial application of this 
 <code>Id</code> to up to <code>n-1</code> value arguments does essentially no work.
</p><p>That is not necessarily the same as saying that it has <code>n</code> leading 
 lambdas, because coerces may get in the way.
</p><p>The arity might increase later in the compilation process, if
 an extra lambda floats up to the binding site.
</p></div></div><div class="top"><p class="src"><a name="v:unknownArity" class="def">unknownArity</a> :: <a href="BasicTypes.html#t:Arity">Arity</a></p><div class="doc"><p>It is always safe to assume that an <code>Id</code> has an arity of 0
</p></div></div><div class="top"><p class="src"><a name="v:arityInfo" class="def">arityInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:ArityInfo">ArityInfo</a></p><div class="doc"><p><code>Id</code> arity
</p></div></div><div class="top"><p class="src"><a name="v:setArityInfo" class="def">setArityInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:ArityInfo">ArityInfo</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></p></div><div class="top"><p class="src"><a name="v:ppArityInfo" class="def">ppArityInfo</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><h2 id="g:5">Demand and strictness Info
</h2><div class="top"><p class="src"><a name="v:strictnessInfo" class="def">strictnessInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Demand.html#t:StrictSig">StrictSig</a></p><div class="doc"><p>Id strictness information. Reason for Maybe: 
 the DmdAnal phase needs to know whether
 this is the first visit, so it can assign botSig.
 Other customers want topSig.  So <code>Nothing</code> is good.
</p></div></div><div class="top"><p class="src"><a name="v:setStrictnessInfo" class="def">setStrictnessInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Demand.html#t:StrictSig">StrictSig</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></p></div><div class="top"><p class="src"><a name="v:demandInfo" class="def">demandInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Demand.html#t:Demand">Demand</a></p><div class="doc"><p>Id demand information. Similarly we want to know 
 if there's no known demand yet, for when we are looking
 for CPR info
</p></div></div><div class="top"><p class="src"><a name="v:setDemandInfo" class="def">setDemandInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Demand.html#t:Demand">Demand</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></p></div><div class="top"><p class="src"><a name="v:pprStrictness" class="def">pprStrictness</a> :: <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Demand.html#t:StrictSig">StrictSig</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><h2 id="g:6">Unfolding Info
</h2><div class="top"><p class="src"><a name="v:unfoldingInfo" class="def">unfoldingInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="CoreSyn.html#t:Unfolding">Unfolding</a></p><div class="doc"><p>The <code>Id</code>s unfolding
</p></div></div><div class="top"><p class="src"><a name="v:setUnfoldingInfo" class="def">setUnfoldingInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></p></div><div class="top"><p class="src"><a name="v:setUnfoldingInfoLazily" class="def">setUnfoldingInfoLazily</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></p></div><h2 id="g:7">The InlinePragInfo type
</h2><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:InlinePragInfo" class="def">InlinePragInfo</a> = <a href="BasicTypes.html#t:InlinePragma">InlinePragma</a></p><div class="doc"><p>Tells when the inlining is active.
 When it is active the thing may be inlined, depending on how
 big it is.
</p><p>If there was an <code>INLINE</code> pragma, then as a separate matter, the
 RHS will have been made to look small with a Core inline <code>Note</code>
</p><p>The default <code><a href="IdInfo.html#t:InlinePragInfo">InlinePragInfo</a></code> is <code><a href="BasicTypes.html#v:AlwaysActive">AlwaysActive</a></code>, so the info serves
 entirely as a way to inhibit inlining until we want it
</p></div></div><div class="top"><p class="src"><a name="v:inlinePragInfo" class="def">inlinePragInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="BasicTypes.html#t:InlinePragma">InlinePragma</a></p><div class="doc"><p>Any inline pragma atached to the <code>Id</code>
</p></div></div><div class="top"><p class="src"><a name="v:setInlinePragInfo" class="def">setInlinePragInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="BasicTypes.html#t:InlinePragma">InlinePragma</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></p></div><h2 id="g:8">The OccInfo type
</h2><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:OccInfo" class="def">OccInfo</a>  </p><div class="doc"><p>Identifier occurrence information
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:NoOccInfo" class="def">NoOccInfo</a></td><td class="doc"><p>There are many occurrences, or unknown occurences
</p></td></tr><tr><td class="src"><a name="v:IAmDead" class="def">IAmDead</a></td><td class="doc"><p>Marks unused variables.  Sometimes useful for
 lambda and case-bound variables.
</p></td></tr><tr><td class="src"><a name="v:OneOcc" class="def">OneOcc</a> !<a href="IdInfo.html#t:InsideLam">InsideLam</a> !<a href="IdInfo.html#t:OneBranch">OneBranch</a> !<a href="BasicTypes.html#t:InterestingCxt">InterestingCxt</a></td><td class="doc"><p>Occurs exactly once, not inside a rule
</p></td></tr><tr><td class="src"><a name="v:IAmALoopBreaker" class="def">IAmALoopBreaker</a> !RulesOnly</td><td class="doc"><p>This identifier breaks a loop of mutually recursive functions. The field
 marks whether it is only a loop breaker due to a reference in a rule
</p></td></tr></table></div><div class="subs instances"><p id="control.i:OccInfo" class="caption collapser" onclick="toggleSection('i:OccInfo')">Instances</p><div id="section.i:OccInfo" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> <a href="IdInfo.html#t:OccInfo">OccInfo</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="IdInfo.html#t:OccInfo">OccInfo</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:isDeadOcc" class="def">isDeadOcc</a> :: <a href="IdInfo.html#t:OccInfo">OccInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isStrongLoopBreaker" class="def">isStrongLoopBreaker</a> :: <a href="IdInfo.html#t:OccInfo">OccInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isWeakLoopBreaker" class="def">isWeakLoopBreaker</a> :: <a href="IdInfo.html#t:OccInfo">OccInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:occInfo" class="def">occInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:OccInfo">OccInfo</a></p><div class="doc"><p>How the <code>Id</code> occurs in the program
</p></div></div><div class="top"><p class="src"><a name="v:setOccInfo" class="def">setOccInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:OccInfo">OccInfo</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:InsideLam" class="def">InsideLam</a> = <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:OneBranch" class="def">OneBranch</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:insideLam" class="def">insideLam</a> :: <a href="IdInfo.html#t:InsideLam">InsideLam</a></p></div><div class="top"><p class="src"><a name="v:notInsideLam" class="def">notInsideLam</a> :: <a href="IdInfo.html#t:InsideLam">InsideLam</a></p></div><div class="top"><p class="src"><a name="v:oneBranch" class="def">oneBranch</a> :: <a href="IdInfo.html#t:OneBranch">OneBranch</a></p></div><div class="top"><p class="src"><a name="v:notOneBranch" class="def">notOneBranch</a> :: <a href="IdInfo.html#t:OneBranch">OneBranch</a></p></div><h2 id="g:9">The SpecInfo type
</h2><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:SpecInfo" class="def">SpecInfo</a>  </p><div class="doc"><p>Records the specializations of this <code>Id</code> that we know about
 in the form of rewrite <code><a href="CoreSyn.html#t:CoreRule">CoreRule</a></code>s that target them
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:SpecInfo" class="def">SpecInfo</a> [<a href="CoreSyn.html#t:CoreRule">CoreRule</a>] <a href="VarSet.html#t:VarSet">VarSet</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><a name="v:emptySpecInfo" class="def">emptySpecInfo</a> :: <a href="IdInfo.html#t:SpecInfo">SpecInfo</a></p><div class="doc"><p>Assume that no specilizations exist: always safe
</p></div></div><div class="top"><p class="src"><a name="v:isEmptySpecInfo" class="def">isEmptySpecInfo</a> :: <a href="IdInfo.html#t:SpecInfo">SpecInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:specInfoFreeVars" class="def">specInfoFreeVars</a> :: <a href="IdInfo.html#t:SpecInfo">SpecInfo</a> -&gt; <a href="VarSet.html#t:VarSet">VarSet</a></p><div class="doc"><p>Retrieve the locally-defined free variables of both the left and
 right hand sides of the specialization rules
</p></div></div><div class="top"><p class="src"><a name="v:specInfoRules" class="def">specInfoRules</a> :: <a href="IdInfo.html#t:SpecInfo">SpecInfo</a> -&gt; [<a href="CoreSyn.html#t:CoreRule">CoreRule</a>]</p></div><div class="top"><p class="src"><a name="v:seqSpecInfo" class="def">seqSpecInfo</a> :: <a href="IdInfo.html#t:SpecInfo">SpecInfo</a> -&gt; ()</p></div><div class="top"><p class="src"><a name="v:setSpecInfoHead" class="def">setSpecInfoHead</a> :: <a href="Name.html#t:Name">Name</a> -&gt; <a href="IdInfo.html#t:SpecInfo">SpecInfo</a> -&gt; <a href="IdInfo.html#t:SpecInfo">SpecInfo</a></p><div class="doc"><p>Change the name of the function the rule is keyed on on all of the <code><a href="CoreSyn.html#t:CoreRule">CoreRule</a></code>s
</p></div></div><div class="top"><p class="src"><a name="v:specInfo" class="def">specInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:SpecInfo">SpecInfo</a></p><div class="doc"><p>Specialisations of the <code>Id</code>s function which exist
 See Note [Specialisations and RULES in IdInfo]
</p></div></div><div class="top"><p class="src"><a name="v:setSpecInfo" class="def">setSpecInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:SpecInfo">SpecInfo</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></p></div><h2 id="g:10">The CAFInfo type
</h2><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:CafInfo" class="def">CafInfo</a>  </p><div class="doc"><p>Records whether an <code>Id</code> makes Constant Applicative Form references
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:MayHaveCafRefs" class="def">MayHaveCafRefs</a></td><td class="doc"><p>Indicates that the <code>Id</code> is for either:
</p><ol><li> A function or static constructor
    that refers to one or more CAFs, or
</li><li> A real live CAF
</li></ol></td></tr><tr><td class="src"><a name="v:NoCafRefs" class="def">NoCafRefs</a></td><td class="doc"><p>A function or static constructor
 that refers to no CAFs.
</p></td></tr></table></div><div class="subs instances"><p id="control.i:CafInfo" class="caption collapser" onclick="toggleSection('i:CafInfo')">Instances</p><div id="section.i:CafInfo" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="IdInfo.html#t:CafInfo">CafInfo</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> <a href="IdInfo.html#t:CafInfo">CafInfo</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="IdInfo.html#t:CafInfo">CafInfo</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:ppCafInfo" class="def">ppCafInfo</a> :: <a href="IdInfo.html#t:CafInfo">CafInfo</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:mayHaveCafRefs" class="def">mayHaveCafRefs</a> :: <a href="IdInfo.html#t:CafInfo">CafInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:cafInfo" class="def">cafInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:CafInfo">CafInfo</a></p><div class="doc"><p><code>Id</code> CAF info
</p></div></div><div class="top"><p class="src"><a name="v:setCafInfo" class="def">setCafInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:CafInfo">CafInfo</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></p></div><h2 id="g:11">The LBVarInfo type
</h2><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:LBVarInfo" class="def">LBVarInfo</a>  </p><div class="doc"><p>If the <code>Id</code> is a lambda-bound variable then it may have lambda-bound
 variable info. Sometimes we know whether the lambda binding this variable
 is a &quot;one-shot&quot; lambda; that is, whether it is applied at most once.
</p><p>This information may be useful in optimisation, as computations may
 safely be floated inside such a lambda without risk of duplicating
 work.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:NoLBVarInfo" class="def">NoLBVarInfo</a></td><td class="doc"><p>No information
</p></td></tr><tr><td class="src"><a name="v:IsOneShotLambda" class="def">IsOneShotLambda</a></td><td class="doc"><p>The lambda is applied at most once).
</p></td></tr></table></div><div class="subs instances"><p id="control.i:LBVarInfo" class="caption collapser" onclick="toggleSection('i:LBVarInfo')">Instances</p><div id="section.i:LBVarInfo" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> <a href="IdInfo.html#t:LBVarInfo">LBVarInfo</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="IdInfo.html#t:LBVarInfo">LBVarInfo</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:noLBVarInfo" class="def">noLBVarInfo</a> :: <a href="IdInfo.html#t:LBVarInfo">LBVarInfo</a></p><div class="doc"><p>It is always safe to assume that an <code>Id</code> has no lambda-bound variable information
</p></div></div><div class="top"><p class="src"><a name="v:hasNoLBVarInfo" class="def">hasNoLBVarInfo</a> :: <a href="IdInfo.html#t:LBVarInfo">LBVarInfo</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:lbvarInfo" class="def">lbvarInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:LBVarInfo">LBVarInfo</a></p><div class="doc"><p>Info about a lambda-bound variable, if the <code>Id</code> is one
</p></div></div><div class="top"><p class="src"><a name="v:setLBVarInfo" class="def">setLBVarInfo</a> :: <a href="IdInfo.html#t:IdInfo">IdInfo</a> -&gt; <a href="IdInfo.html#t:LBVarInfo">LBVarInfo</a> -&gt; <a href="IdInfo.html#t:IdInfo">IdInfo</a></p></div><h2 id="g:12">Tick-box Info
</h2><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:TickBoxOp" class="def">TickBoxOp</a>  </p><div class="doc"><p>Tick box for Hpc-style coverage
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:TickBox" class="def">TickBox</a> <a href="Module.html#t:Module">Module</a> !<a href="IdInfo.html#t:TickBoxId">TickBoxId</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:TickBoxOp" class="caption collapser" onclick="toggleSection('i:TickBoxOp')">Instances</p><div id="section.i:TickBoxOp" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="IdInfo.html#t:TickBoxOp">TickBoxOp</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TickBoxId" class="def">TickBoxId</a> = <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</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>