Sophie

Sophie

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

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>Compiler.Hoopl</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_Compiler-Hoopl.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">hoopl-3.8.7.3: A library to support dataflow analysis and optimization</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>Safe</td></tr></table><p class="caption">Compiler.Hoopl</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Respecting Fuel
</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">data</span>  <a href="#t:O">O</a> </li><li class="src short"><span class="keyword">data</span>  <a href="#t:C">C</a> </li><li class="src short"><span class="keyword">data</span>  <a href="#t:Block">Block</a> n e x <span class="keyword">where</span><ul class="subs"><li><a href="#v:BFirst">BFirst</a> ::  n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>  </li><li><a href="#v:BMiddle">BMiddle</a> ::  n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>  </li><li><a href="#v:BLast">BLast</a> ::  n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>  </li><li><a href="#v:BCat">BCat</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>  </li><li><a href="#v:BHead">BHead</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>  </li><li><a href="#v:BTail">BTail</a> ::  n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>  </li><li><a href="#v:BClosed">BClosed</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>  </li></ul></li><li class="src short"><span class="keyword">type</span> <a href="#t:Body">Body</a> n = <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (<a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>)</li><li class="src short"><span class="keyword">newtype</span>  <a href="#t:Body-39-">Body'</a> block n = <a href="#v:Body">Body</a> (<a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>))</li><li class="src short"><span class="keyword">type</span> <a href="#t:Graph">Graph</a> = <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> <a href="Compiler-Hoopl.html#t:Block">Block</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:Graph-39-">Graph'</a> block n e x <span class="keyword">where</span><ul class="subs"><li><a href="#v:GNil">GNil</a> ::  <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>  </li><li><a href="#v:GUnit">GUnit</a> ::  block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>  </li><li><a href="#v:GMany">GMany</a> ::  <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> e (block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> x (block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>) -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n e x  </li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:MaybeO">MaybeO</a> ex t <span class="keyword">where</span><ul class="subs"><li><a href="#v:JustO">JustO</a> ::  t -&gt; <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> <a href="Compiler-Hoopl.html#t:O">O</a> t  </li><li><a href="#v:NothingO">NothingO</a> ::  <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> <a href="Compiler-Hoopl.html#t:C">C</a> t  </li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:MaybeC">MaybeC</a> ex t <span class="keyword">where</span><ul class="subs"><li><a href="#v:JustC">JustC</a> ::  t -&gt; <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> <a href="Compiler-Hoopl.html#t:C">C</a> t  </li><li><a href="#v:NothingC">NothingC</a> ::  <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> <a href="Compiler-Hoopl.html#t:O">O</a> t  </li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:Shape">Shape</a> ex <span class="keyword">where</span><ul class="subs"><li><a href="#v:Closed">Closed</a> ::  <a href="Compiler-Hoopl.html#t:Shape">Shape</a> <a href="Compiler-Hoopl.html#t:C">C</a>  </li><li><a href="#v:Open">Open</a> ::  <a href="Compiler-Hoopl.html#t:Shape">Shape</a> <a href="Compiler-Hoopl.html#t:O">O</a>  </li></ul></li><li class="src short"><span class="keyword">type family</span> <a href="#t:IndexedCO">IndexedCO</a> ex a b :: *</li><li class="src short"><span class="keyword">class</span>  <a href="#t:NonLocal">NonLocal</a> thing  <span class="keyword">where</span><ul class="subs"><li><a href="#v:entryLabel">entryLabel</a> ::  thing <a href="Compiler-Hoopl.html#t:C">C</a> x -&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a></li><li><a href="#v:successors">successors</a> ::  thing e <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; [<a href="Compiler-Hoopl.html#t:Label">Label</a>]</li></ul></li><li class="src short"><a href="#v:emptyBody">emptyBody</a> ::  <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (thing <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>)</li><li class="src short"><a href="#v:addBlock">addBlock</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> thing =&gt; thing <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (thing <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (thing <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>)</li><li class="src short"><a href="#v:bodyList">bodyList</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (block n) =&gt; <a href="Compiler-Hoopl.html#t:Body-39-">Body'</a> block n -&gt; [(<a href="Compiler-Hoopl.html#t:Label">Label</a>, block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>)]</li><li class="src short"><a href="#v:mapGraph">mapGraph</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; n' e x) -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n' e x</li><li class="src short"><a href="#v:mapMaybeO">mapMaybeO</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; n' e x) -&gt; <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> ex (<a href="Compiler-Hoopl.html#t:Block">Block</a> n e x) -&gt; <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> ex (<a href="Compiler-Hoopl.html#t:Block">Block</a> n' e x)</li><li class="src short"><a href="#v:mapMaybeC">mapMaybeC</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; n' e x) -&gt; <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> ex (<a href="Compiler-Hoopl.html#t:Block">Block</a> n e x) -&gt; <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> ex (<a href="Compiler-Hoopl.html#t:Block">Block</a> n' e x)</li><li class="src short"><a href="#v:mapBlock">mapBlock</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; n' e x) -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n' e x</li><li class="src short"><span class="keyword">data</span>  <a href="#t:AGraph">AGraph</a> n e x</li><li class="src short"><a href="#v:graphOfAGraph">graphOfAGraph</a> :: <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e x -&gt; <span class="keyword">forall</span> m. <a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> m =&gt; m (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x)</li><li class="src short"><a href="#v:aGraphOfGraph">aGraphOfGraph</a> ::  <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e x</li><li class="src short"><a href="#v:-60--42--62-">(&lt;*&gt;)</a> :: (GraphRep g, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n) =&gt; g n e <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; g n e x</li><li class="src short"><a href="#v:-124--42--62--60--42--124-">(|*&gt;&lt;*|)</a> :: (GraphRep g, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n) =&gt; g n e <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; g n <a href="Compiler-Hoopl.html#t:C">C</a> x -&gt; g n e x</li><li class="src short"><a href="#v:catGraphs">catGraphs</a> :: (GraphRep g, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n) =&gt; [g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>] -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></li><li class="src short"><a href="#v:addEntrySeq">addEntrySeq</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> x -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x</li><li class="src short"><a href="#v:addExitSeq">addExitSeq</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e <a href="Compiler-Hoopl.html#t:O">O</a></li><li class="src short"><a href="#v:addBlocks">addBlocks</a> :: <a href="Compiler-Hoopl.html#t:HooplNode">HooplNode</a> n =&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e x</li><li class="src short"><a href="#v:unionBlocks">unionBlocks</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a></li><li class="src short"><a href="#v:emptyGraph">emptyGraph</a> :: GraphRep g =&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></li><li class="src short"><a href="#v:emptyClosedGraph">emptyClosedGraph</a> :: GraphRep g =&gt; g n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a></li><li class="src short"><a href="#v:withFresh">withFresh</a> :: Uniques u =&gt; (u -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e x) -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e x</li><li class="src short"><a href="#v:mkFirst">mkFirst</a> :: GraphRep g =&gt; n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; g n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></li><li class="src short"><a href="#v:mkMiddle">mkMiddle</a> :: GraphRep g =&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></li><li class="src short"><a href="#v:mkMiddles">mkMiddles</a> :: (GraphRep g, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n) =&gt; [n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>] -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></li><li class="src short"><a href="#v:mkLast">mkLast</a> :: GraphRep g =&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></li><li class="src short"><a href="#v:mkBranch">mkBranch</a> :: (GraphRep g, <a href="Compiler-Hoopl.html#t:HooplNode">HooplNode</a> n) =&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></li><li class="src short"><a href="#v:mkLabel">mkLabel</a> :: (GraphRep g, <a href="Compiler-Hoopl.html#t:HooplNode">HooplNode</a> n) =&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; g n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></li><li class="src short"><a href="#v:mkWhileDo">mkWhileDo</a> :: <a href="Compiler-Hoopl.html#t:HooplNode">HooplNode</a> n =&gt; (<a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></li><li class="src short"><span class="keyword">class</span>  <a href="#t:IfThenElseable">IfThenElseable</a> x  <span class="keyword">where</span><ul class="subs"><li><a href="#v:mkIfThenElse">mkIfThenElse</a> :: <a href="Compiler-Hoopl.html#t:HooplNode">HooplNode</a> n =&gt; (<a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x</li></ul></li><li class="src short"><a href="#v:mkEntry">mkEntry</a> :: GraphRep g =&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></li><li class="src short"><a href="#v:mkExit">mkExit</a> :: GraphRep g =&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; g n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></li><li class="src short"><span class="keyword">class</span> <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="#t:HooplNode">HooplNode</a> n  <span class="keyword">where</span><ul class="subs"><li><a href="#v:mkBranchNode">mkBranchNode</a> :: <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></li><li><a href="#v:mkLabelNode">mkLabelNode</a> :: <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></li></ul></li><li class="src short"><a href="#v:firstXfer">firstXfer</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f) -&gt; n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; f</li><li class="src short"><a href="#v:distributeXfer">distributeXfer</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; f) -&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f</li><li class="src short"><a href="#v:distributeFact">distributeFact</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f</li><li class="src short"><a href="#v:distributeFactBwd">distributeFactBwd</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f</li><li class="src short"><a href="#v:successorFacts">successorFacts</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; [f]</li><li class="src short"><a href="#v:joinFacts">joinFacts</a> ::  <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f -&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; [f] -&gt; f</li><li class="src short"><a href="#v:joinOutFacts">joinOutFacts</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> node =&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f -&gt; node <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; f</li><li class="src short"><a href="#v:joinMaps">joinMaps</a> :: <a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> k =&gt; <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> v -&gt; <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> (<a href="../containers-0.4.2.1/Data-Map.html#t:Map">Map</a> k v)</li><li class="src short"><a href="#v:foldGraphNodes">foldGraphNodes</a> :: <span class="keyword">forall</span> n a.  (<span class="keyword">forall</span> e x.  n e x -&gt; a -&gt; a) -&gt; <span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x -&gt; a -&gt; a</li><li class="src short"><a href="#v:foldBlockNodesF">foldBlockNodesF</a> :: <span class="keyword">forall</span> n a.  (<span class="keyword">forall</span> e x.  n e x -&gt; a -&gt; a) -&gt; <span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e a a -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x a a</li><li class="src short"><a href="#v:foldBlockNodesB">foldBlockNodesB</a> :: <span class="keyword">forall</span> n a.  (<span class="keyword">forall</span> e x.  n e x -&gt; a -&gt; a) -&gt; <span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x a a -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e a a</li><li class="src short"><a href="#v:foldBlockNodesF3">foldBlockNodesF3</a> :: <span class="keyword">forall</span> n a b c.  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; a -&gt; b, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; b -&gt; b, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; b -&gt; c) -&gt; <span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e a b -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x c b</li><li class="src short"><a href="#v:foldBlockNodesB3">foldBlockNodesB3</a> :: <span class="keyword">forall</span> n a b c.  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; b -&gt; c, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; b -&gt; b, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; a -&gt; b) -&gt; <span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x a b -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e c b</li><li class="src short"><a href="#v:tfFoldBlock">tfFoldBlock</a> :: <span class="keyword">forall</span> n bc bo c e x.  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; bc, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e bc bo -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e bc bo, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e bc bo -&gt; c) -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; bo -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x c (<a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e bc bo)</li><li class="src short"><span class="keyword">data</span>  <a href="#t:ScottBlock">ScottBlock</a> n a = <a href="#v:ScottBlock">ScottBlock</a> (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; a <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>) (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; a <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>) (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; a <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>) (<span class="keyword">forall</span> e x.  a e <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; a <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; a e x)</li><li class="src short"><a href="#v:scottFoldBlock">scottFoldBlock</a> :: <span class="keyword">forall</span> n a e x.  <a href="Compiler-Hoopl.html#t:ScottBlock">ScottBlock</a> n a -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; a e x</li><li class="src short"><a href="#v:fbnf3">fbnf3</a> :: <span class="keyword">forall</span> n a b c.  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; a -&gt; b, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; b -&gt; b, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; b -&gt; c) -&gt; <span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e a b -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x c b</li><li class="src short"><a href="#v:blockToNodeList">blockToNodeList</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; (<a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> e (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>), [n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>], <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> x (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))</li><li class="src short"><a href="#v:blockOfNodeList">blockOfNodeList</a> ::  (<a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> e (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>), [n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>], <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> x (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>)) -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x</li><li class="src short"><a href="#v:blockToNodeList-39-">blockToNodeList'</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; (<a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> e (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>), [n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>], <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> x (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))</li><li class="src short"><a href="#v:blockToNodeList-39--39-">blockToNodeList''</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; (<a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> e (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>), [n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>], <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> x (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))</li><li class="src short"><a href="#v:blockToNodeList-39--39--39-">blockToNodeList'''</a> :: <span class="keyword">forall</span> n e x. (<a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e (NodeList' <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> n) (NodeList' <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> n) ~ NodeList' e <a href="Compiler-Hoopl.html#t:O">O</a> n, <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x (NodeList' e <a href="Compiler-Hoopl.html#t:C">C</a> n) (NodeList' e <a href="Compiler-Hoopl.html#t:O">O</a> n) ~ NodeList' e x n) =&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; NodeList' e x n</li><li class="src short"><a href="#v:analyzeAndRewriteFwdBody">analyzeAndRewriteFwdBody</a> :: <span class="keyword">forall</span> m n f entries. (<a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> entries) =&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f -&gt; entries -&gt; <a href="Compiler-Hoopl.html#t:Body">Body</a> n -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; m (<a href="Compiler-Hoopl.html#t:Body">Body</a> n, <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f)</li><li class="src short"><a href="#v:analyzeAndRewriteBwdBody">analyzeAndRewriteBwdBody</a> :: <span class="keyword">forall</span> m n f entries. (<a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> entries) =&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f -&gt; entries -&gt; <a href="Compiler-Hoopl.html#t:Body">Body</a> n -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; m (<a href="Compiler-Hoopl.html#t:Body">Body</a> n, <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f)</li><li class="src short"><a href="#v:analyzeAndRewriteFwdOx">analyzeAndRewriteFwdOx</a> :: <span class="keyword">forall</span> m n f x. (<a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n) =&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; f -&gt; m (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x, <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f, <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> x f)</li><li class="src short"><a href="#v:analyzeAndRewriteBwdOx">analyzeAndRewriteBwdOx</a> :: <span class="keyword">forall</span> m n f x. (<a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n) =&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f -&gt; m (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x, <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f, f)</li><li class="src short"><a href="#v:noEntries">noEntries</a> :: <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:Label">Label</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:BlockResult">BlockResult</a> n x <span class="keyword">where</span><ul class="subs"><li><a href="#v:NoBlock">NoBlock</a> ::  <a href="Compiler-Hoopl.html#t:BlockResult">BlockResult</a> n x  </li><li><a href="#v:BodyBlock">BodyBlock</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:BlockResult">BlockResult</a> n x  </li><li><a href="#v:ExitBlock">ExitBlock</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:BlockResult">BlockResult</a> n <a href="Compiler-Hoopl.html#t:O">O</a>  </li></ul></li><li class="src short"><a href="#v:lookupBlock">lookupBlock</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:BlockResult">BlockResult</a> n x</li><li class="src short"><span class="keyword">class</span>  <a href="#t:IsSet">IsSet</a> set  <span class="keyword">where</span><ul class="subs"><li><span class="keyword">type</span> <a href="#t:ElemOf">ElemOf</a> set </li><li><a href="#v:setNull">setNull</a> :: set -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:setSize">setSize</a> :: set -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li><a href="#v:setMember">setMember</a> :: <a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set -&gt; set -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:setEmpty">setEmpty</a> :: set</li><li><a href="#v:setSingleton">setSingleton</a> :: <a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set -&gt; set</li><li><a href="#v:setInsert">setInsert</a> :: <a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set -&gt; set -&gt; set</li><li><a href="#v:setDelete">setDelete</a> :: <a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set -&gt; set -&gt; set</li><li><a href="#v:setUnion">setUnion</a> :: set -&gt; set -&gt; set</li><li><a href="#v:setDifference">setDifference</a> :: set -&gt; set -&gt; set</li><li><a href="#v:setIntersection">setIntersection</a> :: set -&gt; set -&gt; set</li><li><a href="#v:setIsSubsetOf">setIsSubsetOf</a> :: set -&gt; set -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:setFold">setFold</a> ::  (<a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set -&gt; b -&gt; b) -&gt; b -&gt; set -&gt; b</li><li><a href="#v:setElems">setElems</a> :: set -&gt; [<a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set]</li><li><a href="#v:setFromList">setFromList</a> :: [<a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set] -&gt; set</li></ul></li><li class="src short"><a href="#v:setInsertList">setInsertList</a> :: <a href="Compiler-Hoopl.html#t:IsSet">IsSet</a> set =&gt; [<a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set] -&gt; set -&gt; set</li><li class="src short"><a href="#v:setDeleteList">setDeleteList</a> :: <a href="Compiler-Hoopl.html#t:IsSet">IsSet</a> set =&gt; [<a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set] -&gt; set -&gt; set</li><li class="src short"><a href="#v:setUnions">setUnions</a> :: <a href="Compiler-Hoopl.html#t:IsSet">IsSet</a> set =&gt; [set] -&gt; set</li><li class="src short"><span class="keyword">class</span>  <a href="#t:IsMap">IsMap</a> map  <span class="keyword">where</span><ul class="subs"><li><span class="keyword">type</span> <a href="#t:KeyOf">KeyOf</a> map </li><li><a href="#v:mapNull">mapNull</a> ::  map a -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:mapSize">mapSize</a> ::  map a -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li><a href="#v:mapMember">mapMember</a> ::  <a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; map a -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:mapLookup">mapLookup</a> ::  <a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; map a -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a</li><li><a href="#v:mapFindWithDefault">mapFindWithDefault</a> ::  a -&gt; <a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; map a -&gt; a</li><li><a href="#v:mapEmpty">mapEmpty</a> ::  map a</li><li><a href="#v:mapSingleton">mapSingleton</a> ::  <a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; a -&gt; map a</li><li><a href="#v:mapInsert">mapInsert</a> ::  <a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; a -&gt; map a -&gt; map a</li><li><a href="#v:mapDelete">mapDelete</a> ::  <a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; map a -&gt; map a</li><li><a href="#v:mapUnion">mapUnion</a> ::  map a -&gt; map a -&gt; map a</li><li><a href="#v:mapUnionWithKey">mapUnionWithKey</a> ::  (<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; a -&gt; a -&gt; a) -&gt; map a -&gt; map a -&gt; map a</li><li><a href="#v:mapDifference">mapDifference</a> ::  map a -&gt; map a -&gt; map a</li><li><a href="#v:mapIntersection">mapIntersection</a> ::  map a -&gt; map a -&gt; map a</li><li><a href="#v:mapIsSubmapOf">mapIsSubmapOf</a> :: <a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; map a -&gt; map a -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:mapMap">mapMap</a> ::  (a -&gt; b) -&gt; map a -&gt; map b</li><li><a href="#v:mapMapWithKey">mapMapWithKey</a> ::  (<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; a -&gt; b) -&gt; map a -&gt; map b</li><li><a href="#v:mapFold">mapFold</a> ::  (a -&gt; b -&gt; b) -&gt; b -&gt; map a -&gt; b</li><li><a href="#v:mapFoldWithKey">mapFoldWithKey</a> ::  (<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; a -&gt; b -&gt; b) -&gt; b -&gt; map a -&gt; b</li><li><a href="#v:mapElems">mapElems</a> ::  map a -&gt; [a]</li><li><a href="#v:mapKeys">mapKeys</a> ::  map a -&gt; [<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map]</li><li><a href="#v:mapToList">mapToList</a> ::  map a -&gt; [(<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map, a)]</li><li><a href="#v:mapFromList">mapFromList</a> ::  [(<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map, a)] -&gt; map a</li></ul></li><li class="src short"><a href="#v:mapInsertList">mapInsertList</a> :: <a href="Compiler-Hoopl.html#t:IsMap">IsMap</a> map =&gt; [(<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map, a)] -&gt; map a -&gt; map a</li><li class="src short"><a href="#v:mapDeleteList">mapDeleteList</a> :: <a href="Compiler-Hoopl.html#t:IsMap">IsMap</a> map =&gt; [<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map] -&gt; map a -&gt; map a</li><li class="src short"><a href="#v:mapUnions">mapUnions</a> :: <a href="Compiler-Hoopl.html#t:IsMap">IsMap</a> map =&gt; [map a] -&gt; map a</li><li class="src short"><span class="keyword">class</span> <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="#t:CheckpointMonad">CheckpointMonad</a> m  <span class="keyword">where</span><ul class="subs"><li><span class="keyword">type</span> <a href="#t:Checkpoint">Checkpoint</a> m </li><li><a href="#v:checkpoint">checkpoint</a> :: m (<a href="Compiler-Hoopl.html#t:Checkpoint">Checkpoint</a> m)</li><li><a href="#v:restart">restart</a> :: <a href="Compiler-Hoopl.html#t:Checkpoint">Checkpoint</a> m -&gt; m ()</li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:DataflowLattice">DataflowLattice</a> a = <a href="#v:DataflowLattice">DataflowLattice</a> {<ul class="subs"><li><a href="#v:fact_name">fact_name</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></li><li><a href="#v:fact_bot">fact_bot</a> :: a</li><li><a href="#v:fact_join">fact_join</a> :: <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> a</li></ul>}</li><li class="src short"><span class="keyword">type</span> <a href="#t:JoinFun">JoinFun</a> a = <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:OldFact">OldFact</a> a -&gt; <a href="Compiler-Hoopl.html#t:NewFact">NewFact</a> a -&gt; (<a href="Compiler-Hoopl.html#t:ChangeFlag">ChangeFlag</a>, a)</li><li class="src short"><span class="keyword">newtype</span>  <a href="#t:OldFact">OldFact</a> a = <a href="#v:OldFact">OldFact</a> a</li><li class="src short"><span class="keyword">newtype</span>  <a href="#t:NewFact">NewFact</a> a = <a href="#v:NewFact">NewFact</a> a</li><li class="src short"><span class="keyword">type family</span> <a href="#t:Fact">Fact</a> x f :: *</li><li class="src short"><a href="#v:mkFactBase">mkFactBase</a> :: <span class="keyword">forall</span> f.  <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f -&gt; [(<a href="Compiler-Hoopl.html#t:Label">Label</a>, f)] -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f</li><li class="src short"><span class="keyword">data</span>  <a href="#t:ChangeFlag">ChangeFlag</a> <ul class="subs"><li>= <a href="#v:NoChange">NoChange</a>  </li><li>| <a href="#v:SomeChange">SomeChange</a>  </li></ul></li><li class="src short"><a href="#v:changeIf">changeIf</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> -&gt; <a href="Compiler-Hoopl.html#t:ChangeFlag">ChangeFlag</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:FwdPass">FwdPass</a> m n f = <a href="#v:FwdPass">FwdPass</a> {<ul class="subs"><li><a href="#v:fp_lattice">fp_lattice</a> :: <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f</li><li><a href="#v:fp_transfer">fp_transfer</a> :: <a href="Compiler-Hoopl.html#t:FwdTransfer">FwdTransfer</a> n f</li><li><a href="#v:fp_rewrite">fp_rewrite</a> :: <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</li></ul>}</li><li class="src short"><span class="keyword">data</span>  <a href="#t:FwdTransfer">FwdTransfer</a> n f</li><li class="src short"><a href="#v:mkFTransfer">mkFTransfer</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; f -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f) -&gt; <a href="Compiler-Hoopl.html#t:FwdTransfer">FwdTransfer</a> n f</li><li class="src short"><a href="#v:mkFTransfer3">mkFTransfer3</a> ::  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f) -&gt; <a href="Compiler-Hoopl.html#t:FwdTransfer">FwdTransfer</a> n f</li><li class="src short"><a href="#v:getFTransfer3">getFTransfer3</a> :: <a href="Compiler-Hoopl.html#t:FwdTransfer">FwdTransfer</a> n f -&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f)</li><li class="src short"><span class="keyword">data</span>  <a href="#t:FwdRewrite">FwdRewrite</a> m n f</li><li class="src short"><a href="#v:mkFRewrite">mkFRewrite</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (<span class="keyword">forall</span> e x.  n e x -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n e x))) -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</li><li class="src short"><a href="#v:mkFRewrite3">mkFRewrite3</a> :: <span class="keyword">forall</span> m n f. <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))) -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</li><li class="src short"><a href="#v:getFRewrite3">getFRewrite3</a> :: <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f -&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f)), n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f)), n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f)))</li><li class="src short"><a href="#v:noFwdRewrite">noFwdRewrite</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</li><li class="src short"><a href="#v:wrapFR">wrapFR</a> ::  (<span class="keyword">forall</span> e x.  (n e x -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n e x, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f))) -&gt; n' e x -&gt; f' -&gt; m' (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n' e x, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m' n' f'))) -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m' n' f'</li><li class="src short"><a href="#v:wrapFR2">wrapFR2</a> ::  (<span class="keyword">forall</span> e x.  (n1 e x -&gt; f1 -&gt; m1 (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n1 e x, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m1 n1 f1))) -&gt; (n2 e x -&gt; f2 -&gt; m2 (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n2 e x, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m2 n2 f2))) -&gt; n3 e x -&gt; f3 -&gt; m3 (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n3 e x, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m3 n3 f3))) -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m1 n1 f1 -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m2 n2 f2 -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m3 n3 f3</li><li class="src short"><span class="keyword">data</span>  <a href="#t:BwdPass">BwdPass</a> m n f = <a href="#v:BwdPass">BwdPass</a> {<ul class="subs"><li><a href="#v:bp_lattice">bp_lattice</a> :: <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f</li><li><a href="#v:bp_transfer">bp_transfer</a> :: <a href="Compiler-Hoopl.html#t:BwdTransfer">BwdTransfer</a> n f</li><li><a href="#v:bp_rewrite">bp_rewrite</a> :: <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</li></ul>}</li><li class="src short"><span class="keyword">data</span>  <a href="#t:BwdTransfer">BwdTransfer</a> n f</li><li class="src short"><a href="#v:mkBTransfer">mkBTransfer</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f -&gt; f) -&gt; <a href="Compiler-Hoopl.html#t:BwdTransfer">BwdTransfer</a> n f</li><li class="src short"><a href="#v:mkBTransfer3">mkBTransfer3</a> ::  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; f) -&gt; <a href="Compiler-Hoopl.html#t:BwdTransfer">BwdTransfer</a> n f</li><li class="src short"><a href="#v:getBTransfer3">getBTransfer3</a> :: <a href="Compiler-Hoopl.html#t:BwdTransfer">BwdTransfer</a> n f -&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; f)</li><li class="src short"><a href="#v:wrapBR">wrapBR</a> ::  (<span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Shape">Shape</a> x -&gt; (n e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n e x, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f))) -&gt; n' e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f' -&gt; m' (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n' e x, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m' n' f'))) -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m' n' f'</li><li class="src short"><a href="#v:wrapBR2">wrapBR2</a> ::  (<span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Shape">Shape</a> x -&gt; (n1 e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f1 -&gt; m1 (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n1 e x, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m1 n1 f1))) -&gt; (n2 e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f2 -&gt; m2 (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n2 e x, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m2 n2 f2))) -&gt; n3 e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f3 -&gt; m3 (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n3 e x, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m3 n3 f3))) -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m1 n1 f1 -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m2 n2 f2 -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m3 n3 f3</li><li class="src short"><span class="keyword">data</span>  <a href="#t:BwdRewrite">BwdRewrite</a> m n f</li><li class="src short"><a href="#v:mkBRewrite">mkBRewrite</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (<span class="keyword">forall</span> e x.  n e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n e x))) -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</li><li class="src short"><a href="#v:mkBRewrite3">mkBRewrite3</a> :: <span class="keyword">forall</span> m n f. <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))) -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</li><li class="src short"><a href="#v:getBRewrite3">getBRewrite3</a> :: <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f -&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f)), n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f)), n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f)))</li><li class="src short"><a href="#v:noBwdRewrite">noBwdRewrite</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</li><li class="src short"><a href="#v:analyzeAndRewriteFwd">analyzeAndRewriteFwd</a> :: <span class="keyword">forall</span> m n f e x entries. (<a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> entries) =&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> e entries -&gt; Graph n e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> e f -&gt; m (Graph n e x, <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f, <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> x f)</li><li class="src short"><a href="#v:analyzeAndRewriteBwd">analyzeAndRewriteBwd</a> :: (<a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> entries) =&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> e entries -&gt; Graph n e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f -&gt; m (Graph n e x, <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f, <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> e f)</li><li class="src short"><span class="keyword">data</span>  <a href="#t:Label">Label</a> </li><li class="src short"><a href="#v:freshLabel">freshLabel</a> :: <a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> m =&gt; m <a href="Compiler-Hoopl.html#t:Label">Label</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:LabelSet">LabelSet</a> </li><li class="src short"><span class="keyword">data</span>  <a href="#t:LabelMap">LabelMap</a> v</li><li class="src short"><span class="keyword">type</span> <a href="#t:FactBase">FactBase</a> f = <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> f</li><li class="src short"><a href="#v:noFacts">noFacts</a> ::  <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f</li><li class="src short"><a href="#v:lookupFact">lookupFact</a> ::  <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> f</li><li class="src short"><a href="#v:uniqueToLbl">uniqueToLbl</a> :: <a href="Compiler-Hoopl.html#t:Unique">Unique</a> -&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a></li><li class="src short"><a href="#v:lblToUnique">lblToUnique</a> :: <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:Unique">Unique</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:Pointed">Pointed</a> t b a <span class="keyword">where</span><ul class="subs"><li><a href="#v:Bot">Bot</a> ::  <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t <a href="Compiler-Hoopl.html#t:C">C</a> a  </li><li><a href="#v:PElem">PElem</a> ::  a -&gt; <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t b a  </li><li><a href="#v:Top">Top</a> ::  <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> <a href="Compiler-Hoopl.html#t:C">C</a> b a  </li></ul></li><li class="src short"><a href="#v:addPoints">addPoints</a> ::  <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> a -&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> (<a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t <a href="Compiler-Hoopl.html#t:C">C</a> a)</li><li class="src short"><a href="#v:addPoints-39-">addPoints'</a> :: <span class="keyword">forall</span> a t.  <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; (<a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:OldFact">OldFact</a> a -&gt; <a href="Compiler-Hoopl.html#t:NewFact">NewFact</a> a -&gt; (<a href="Compiler-Hoopl.html#t:ChangeFlag">ChangeFlag</a>, <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t <a href="Compiler-Hoopl.html#t:C">C</a> a)) -&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> (<a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t <a href="Compiler-Hoopl.html#t:C">C</a> a)</li><li class="src short"><a href="#v:addTop">addTop</a> ::  <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> a -&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> (<a href="Compiler-Hoopl.html#t:WithTop">WithTop</a> a)</li><li class="src short"><a href="#v:addTop-39-">addTop'</a> :: <span class="keyword">forall</span> a.  <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; a -&gt; (<a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:OldFact">OldFact</a> a -&gt; <a href="Compiler-Hoopl.html#t:NewFact">NewFact</a> a -&gt; (<a href="Compiler-Hoopl.html#t:ChangeFlag">ChangeFlag</a>, <a href="Compiler-Hoopl.html#t:WithTop">WithTop</a> a)) -&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> (<a href="Compiler-Hoopl.html#t:WithTop">WithTop</a> a)</li><li class="src short"><a href="#v:liftJoinTop">liftJoinTop</a> ::  <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> a -&gt; <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> (<a href="Compiler-Hoopl.html#t:WithTop">WithTop</a> a)</li><li class="src short"><a href="#v:extendJoinDomain">extendJoinDomain</a> :: <span class="keyword">forall</span> a.  (<a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:OldFact">OldFact</a> a -&gt; <a href="Compiler-Hoopl.html#t:NewFact">NewFact</a> a -&gt; (<a href="Compiler-Hoopl.html#t:ChangeFlag">ChangeFlag</a>, <a href="Compiler-Hoopl.html#t:WithTop">WithTop</a> a)) -&gt; <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> (<a href="Compiler-Hoopl.html#t:WithTop">WithTop</a> a)</li><li class="src short"><span class="keyword">type</span> <a href="#t:WithTop">WithTop</a> a = <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> a</li><li class="src short"><span class="keyword">type</span> <a href="#t:WithBot">WithBot</a> a = <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> a</li><li class="src short"><span class="keyword">type</span> <a href="#t:WithTopAndBot">WithTopAndBot</a> a = <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> a</li><li class="src short"><a href="#v:thenFwdRw">thenFwdRw</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</li><li class="src short"><a href="#v:deepFwdRw3">deepFwdRw3</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))) -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</li><li class="src short"><a href="#v:deepFwdRw">deepFwdRw</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (<span class="keyword">forall</span> e x.  n e x -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x))) -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</li><li class="src short"><a href="#v:iterFwdRw">iterFwdRw</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</li><li class="src short"><a href="#v:thenBwdRw">thenBwdRw</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</li><li class="src short"><a href="#v:deepBwdRw3">deepBwdRw3</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))) -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</li><li class="src short"><a href="#v:deepBwdRw">deepBwdRw</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (<span class="keyword">forall</span> e x.  n e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x))) -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</li><li class="src short"><a href="#v:iterBwdRw">iterBwdRw</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</li><li class="src short"><a href="#v:pairFwd">pairFwd</a> :: <span class="keyword">forall</span> m n f f'. <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f' -&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n (f, f')</li><li class="src short"><a href="#v:pairBwd">pairBwd</a> :: <span class="keyword">forall</span> m n f f'. <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f' -&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n (f, f')</li><li class="src short"><a href="#v:pairLattice">pairLattice</a> :: <span class="keyword">forall</span> f f'.  <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f -&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f' -&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> (f, f')</li><li class="src short"><span class="keyword">type</span> <a href="#t:Fuel">Fuel</a> = <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li class="src short"><a href="#v:infiniteFuel">infiniteFuel</a> :: <a href="Compiler-Hoopl.html#t:Fuel">Fuel</a></li><li class="src short"><a href="#v:fuelRemaining">fuelRemaining</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; m <a href="Compiler-Hoopl.html#t:Fuel">Fuel</a></li><li class="src short"><a href="#v:withFuel">withFuel</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a)</li><li class="src short"><span class="keyword">class</span> <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="#t:FuelMonad">FuelMonad</a> m  <span class="keyword">where</span><ul class="subs"><li><a href="#v:getFuel">getFuel</a> :: m <a href="Compiler-Hoopl.html#t:Fuel">Fuel</a></li><li><a href="#v:setFuel">setFuel</a> :: <a href="Compiler-Hoopl.html#t:Fuel">Fuel</a> -&gt; m ()</li></ul></li><li class="src short"><span class="keyword">class</span>  <a href="#t:FuelMonadT">FuelMonadT</a> fm  <span class="keyword">where</span><ul class="subs"><li><a href="#v:runWithFuel">runWithFuel</a> :: (<a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> (fm m)) =&gt; <a href="Compiler-Hoopl.html#t:Fuel">Fuel</a> -&gt; fm m a -&gt; m a</li><li><a href="#v:liftFuel">liftFuel</a> :: (<a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> (fm m)) =&gt; m a -&gt; fm m a</li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:CheckingFuelMonad">CheckingFuelMonad</a> m a</li><li class="src short"><span class="keyword">data</span>  <a href="#t:InfiniteFuelMonad">InfiniteFuelMonad</a> m a</li><li class="src short"><span class="keyword">type</span> <a href="#t:SimpleFuelMonad">SimpleFuelMonad</a> = <a href="Compiler-Hoopl.html#t:CheckingFuelMonad">CheckingFuelMonad</a> <a href="Compiler-Hoopl.html#t:SimpleUniqueMonad">SimpleUniqueMonad</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:Unique">Unique</a> </li><li class="src short"><a href="#v:intToUnique">intToUnique</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="Compiler-Hoopl.html#t:Unique">Unique</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:UniqueSet">UniqueSet</a> </li><li class="src short"><span class="keyword">data</span>  <a href="#t:UniqueMap">UniqueMap</a> v</li><li class="src short"><span class="keyword">class</span> <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="#t:UniqueMonad">UniqueMonad</a> m  <span class="keyword">where</span><ul class="subs"><li><a href="#v:freshUnique">freshUnique</a> :: m <a href="Compiler-Hoopl.html#t:Unique">Unique</a></li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:SimpleUniqueMonad">SimpleUniqueMonad</a> a</li><li class="src short"><a href="#v:runSimpleUniqueMonad">runSimpleUniqueMonad</a> ::  <a href="Compiler-Hoopl.html#t:SimpleUniqueMonad">SimpleUniqueMonad</a> a -&gt; a</li><li class="src short"><span class="keyword">data</span>  <a href="#t:UniqueMonadT">UniqueMonadT</a> m a</li><li class="src short"><a href="#v:runUniqueMonadT">runUniqueMonadT</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:UniqueMonadT">UniqueMonadT</a> m a -&gt; m a</li><li class="src short"><a href="#v:uniqueToInt">uniqueToInt</a> :: <a href="Compiler-Hoopl.html#t:Unique">Unique</a> -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li class="src short"><a href="#v:gUnitOO">gUnitOO</a> ::  block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></li><li class="src short"><a href="#v:gUnitOC">gUnitOC</a> ::  block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></li><li class="src short"><a href="#v:gUnitCO">gUnitCO</a> ::  block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></li><li class="src short"><a href="#v:gUnitCC">gUnitCC</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (block n) =&gt; block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a></li><li class="src short"><a href="#v:catGraphNodeOC">catGraphNodeOC</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e <a href="Compiler-Hoopl.html#t:C">C</a></li><li class="src short"><a href="#v:catGraphNodeOO">catGraphNodeOO</a> ::  <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e <a href="Compiler-Hoopl.html#t:O">O</a></li><li class="src short"><a href="#v:catNodeCOGraph">catNodeCOGraph</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> x</li><li class="src short"><a href="#v:catNodeOOGraph">catNodeOOGraph</a> ::  n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x</li><li class="src short"><a href="#v:graphMapBlocks">graphMapBlocks</a> :: <span class="keyword">forall</span> block n block' n' e x.  (<span class="keyword">forall</span> e x.  block n e x -&gt; block' n' e x) -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n e x -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block' n' e x</li><li class="src short"><a href="#v:blockMapNodes">blockMapNodes</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; n' e x) -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n' e x</li><li class="src short"><a href="#v:blockMapNodes3">blockMapNodes3</a> ::  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; n' <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; n' <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; n' <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n' e x</li><li class="src short"><a href="#v:blockGraph">blockGraph</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x</li><li class="src short"><a href="#v:postorder_dfs">postorder_dfs</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (block n) =&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; [block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>]</li><li class="src short"><a href="#v:postorder_dfs_from">postorder_dfs_from</a> :: (<a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> block, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> b) =&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (block <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; b -&gt; [block <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>]</li><li class="src short"><a href="#v:postorder_dfs_from_except">postorder_dfs_from_except</a> :: <span class="keyword">forall</span> block e. (<a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> block, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> e) =&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (block <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; e -&gt; <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a> -&gt; [block <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>]</li><li class="src short"><a href="#v:preorder_dfs">preorder_dfs</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (block n) =&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; [block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>]</li><li class="src short"><a href="#v:preorder_dfs_from_except">preorder_dfs_from_except</a> :: <span class="keyword">forall</span> block e. (<a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> block, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> e) =&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (block <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; e -&gt; <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a> -&gt; [block <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>]</li><li class="src short"><a href="#v:labelsDefined">labelsDefined</a> :: <span class="keyword">forall</span> block n e x. <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (block n) =&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n e x -&gt; <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a></li><li class="src short"><a href="#v:labelsUsed">labelsUsed</a> :: <span class="keyword">forall</span> block n e x. <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (block n) =&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n e x -&gt; <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a></li><li class="src short"><a href="#v:externalEntryLabels">externalEntryLabels</a> :: <span class="keyword">forall</span> n. <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (<a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a></li><li class="src short"><span class="keyword">class</span>  <a href="#t:LabelsPtr">LabelsPtr</a> l  <span class="keyword">where</span><ul class="subs"><li><a href="#v:targetLabels">targetLabels</a> :: l -&gt; [<a href="Compiler-Hoopl.html#t:Label">Label</a>]</li></ul></li><li class="src short"><span class="keyword">type</span> <a href="#t:TraceFn">TraceFn</a> = <span class="keyword">forall</span> a.  <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; a -&gt; a</li><li class="src short"><a href="#v:debugFwdJoins">debugFwdJoins</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> f =&gt; <a href="Compiler-Hoopl.html#t:TraceFn">TraceFn</a> -&gt; ChangePred -&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f</li><li class="src short"><a href="#v:debugBwdJoins">debugBwdJoins</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> f =&gt; <a href="Compiler-Hoopl.html#t:TraceFn">TraceFn</a> -&gt; ChangePred -&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f</li><li class="src short"><a href="#v:debugFwdTransfers">debugFwdTransfers</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> f =&gt; <a href="Compiler-Hoopl.html#t:TraceFn">TraceFn</a> -&gt; ShowN n -&gt; FPred n f -&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f</li><li class="src short"><a href="#v:debugBwdTransfers">debugBwdTransfers</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> f =&gt; <a href="Compiler-Hoopl.html#t:TraceFn">TraceFn</a> -&gt; ShowN n -&gt; BPred n f -&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f</li><li class="src short"><a href="#v:showGraph">showGraph</a> :: <span class="keyword">forall</span> n e x. <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; Showing n -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x -&gt; <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></li><li class="src short"><a href="#v:showFactBase">showFactBase</a> :: <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> f =&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></li></ul></div><div id="interface"><h1>Documentation</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:O" class="def">O</a>  </p><div class="doc"><p>Used at the type level to indicate an <a href="open.html">open</a> structure with    
 a unique, unnamed control-flow edge flowing in or out.         
 <a href="Fallthrough.html">Fallthrough</a> and concatenation are permitted at an open point.
</p></div><div class="subs instances"><p id="control.i:O" class="caption collapser" onclick="toggleSection('i:O')">Instances</p><div id="section.i:O" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:IfThenElseable">IfThenElseable</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">ShapeLifter <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">ShapeLifter <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">ShapeLifter <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:C" class="def">C</a>  </p><div class="doc"><p>Used at the type level to indicate a <a href="closed.html">closed</a> structure which
 supports control transfer only through the use of named
 labels---no <a href="fallthrough.html">fallthrough</a> is permitted.  The number of control-flow
 edges is unconstrained.
</p></div><div class="subs instances"><p id="control.i:C" class="caption collapser" onclick="toggleSection('i:C')">Instances</p><div id="section.i:C" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:IfThenElseable">IfThenElseable</a> <a href="Compiler-Hoopl.html#t:C">C</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">ShapeLifter <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">ShapeLifter <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> (n e <a href="Compiler-Hoopl.html#t:C">C</a>)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Block" class="def">Block</a> n e x <span class="keyword">where</span></p><div class="doc"><p>A sequence of nodes.  May be any of four shapes (O<em>O, O</em>C, C<em>O, C</em>C).
 Open at the entry means single entry, mutatis mutandis for exit.
 A closed<em>closed block is a </em>basic/ block and can't be extended further.
 Clients should avoid manipulating blocks and should stick to either nodes
 or graphs.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:BFirst" class="def">BFirst</a> ::  n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:BMiddle" class="def">BMiddle</a> ::  n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:BLast" class="def">BLast</a> ::  n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:BCat" class="def">BCat</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:BHead" class="def">BHead</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:BTail" class="def">BTail</a> ::  n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:BClosed" class="def">BClosed</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:Block" class="caption collapser" onclick="toggleSection('i:Block')">Instances</p><div id="section.i:Block" class="show"><table><tr><td class="src">GraphRep <a href="Compiler-Hoopl.html#t:Graph">Graph</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (<a href="Compiler-Hoopl.html#t:Block">Block</a> n)</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:Body" class="def">Body</a> n = <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (<a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>)</p><div class="doc"><p>A (possibly empty) collection of closed/closed blocks
</p></div></div><div class="top"><p class="src"><span class="keyword">newtype</span>  <a name="t:Body-39-" class="def">Body'</a> block n </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Body" class="def">Body</a> (<a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>))</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Graph" class="def">Graph</a> = <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> <a href="Compiler-Hoopl.html#t:Block">Block</a></p><div class="doc"><p>A control-flow graph, which may take any of four shapes (O<em>O, O</em>C, C<em>O, C</em>C).
 A graph open at the entry has a single, distinguished, anonymous entry point;
 if a graph is closed at the entry, its entry point(s) are supplied by a context.
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Graph-39-" class="def">Graph'</a> block n e x <span class="keyword">where</span></p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:GNil" class="def">GNil</a> ::  <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:GUnit" class="def">GUnit</a> ::  block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:GMany" class="def">GMany</a> ::  <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> e (block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> x (block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>) -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n e x</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:Graph-39-" class="caption collapser" onclick="toggleSection('i:Graph-39-')">Instances</p><div id="section.i:Graph-39-" class="show"><table><tr><td class="src">GraphRep <a href="Compiler-Hoopl.html#t:Graph">Graph</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:MaybeO" class="def">MaybeO</a> ex t <span class="keyword">where</span></p><div class="doc"><p>Maybe type indexed by open/closed
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:JustO" class="def">JustO</a> ::  t -&gt; <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> <a href="Compiler-Hoopl.html#t:O">O</a> t</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:NothingO" class="def">NothingO</a> ::  <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> <a href="Compiler-Hoopl.html#t:C">C</a> t</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:MaybeO" class="caption collapser" onclick="toggleSection('i:MaybeO')">Instances</p><div id="section.i:MaybeO" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Functor">Functor</a> (<a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> ex)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:MaybeC" class="def">MaybeC</a> ex t <span class="keyword">where</span></p><div class="doc"><p>Maybe type indexed by closed/open
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:JustC" class="def">JustC</a> ::  t -&gt; <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> <a href="Compiler-Hoopl.html#t:C">C</a> t</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:NothingC" class="def">NothingC</a> ::  <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> <a href="Compiler-Hoopl.html#t:O">O</a> t</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:MaybeC" class="caption collapser" onclick="toggleSection('i:MaybeC')">Instances</p><div id="section.i:MaybeC" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Functor">Functor</a> (<a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> ex)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Shape" class="def">Shape</a> ex <span class="keyword">where</span></p><div class="doc"><p>Dynamic shape value
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Closed" class="def">Closed</a> ::  <a href="Compiler-Hoopl.html#t:Shape">Shape</a> <a href="Compiler-Hoopl.html#t:C">C</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Open" class="def">Open</a> ::  <a href="Compiler-Hoopl.html#t:Shape">Shape</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">type family</span> <a name="t:IndexedCO" class="def">IndexedCO</a> ex a b :: *</p><div class="doc"><p>Either type indexed by closed/open using type families
</p></div></div><div class="top"><p class="src"><span class="keyword">class</span>  <a name="t:NonLocal" class="def">NonLocal</a> thing  <span class="keyword">where</span></p><div class="doc"><p>Gives access to the anchor points for
 nonlocal edges as well as the edges themselves
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:entryLabel" class="def">entryLabel</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: thing <a href="Compiler-Hoopl.html#t:C">C</a> x</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a></td><td class="doc"><p>The label of a first node or block
</p></td></tr></table></div><p class="src"><a name="v:successors" class="def">successors</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: thing e <a href="Compiler-Hoopl.html#t:C">C</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">-&gt; [<a href="Compiler-Hoopl.html#t:Label">Label</a>]</td><td class="doc"><p>Gives control-flow successors
</p></td></tr></table></div></div><div class="subs instances"><p id="control.i:NonLocal" class="caption collapser" onclick="toggleSection('i:NonLocal')">Instances</p><div id="section.i:NonLocal" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (<a href="Compiler-Hoopl.html#t:Block">Block</a> n)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (DBlock f n)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:emptyBody" class="def">emptyBody</a> ::  <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (thing <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>)</p></div><div class="top"><p class="src"><a name="v:addBlock" class="def">addBlock</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> thing =&gt; thing <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (thing <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (thing <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>)</p></div><div class="top"><p class="src"><a name="v:bodyList" class="def">bodyList</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (block n) =&gt; <a href="Compiler-Hoopl.html#t:Body-39-">Body'</a> block n -&gt; [(<a href="Compiler-Hoopl.html#t:Label">Label</a>, block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>)]</p></div><div class="top"><p class="src"><a name="v:mapGraph" class="def">mapGraph</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; n' e x) -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n' e x</p><div class="doc"><p>Maps over all nodes in a graph.
</p></div></div><div class="top"><p class="src"><a name="v:mapMaybeO" class="def">mapMaybeO</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; n' e x) -&gt; <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> ex (<a href="Compiler-Hoopl.html#t:Block">Block</a> n e x) -&gt; <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> ex (<a href="Compiler-Hoopl.html#t:Block">Block</a> n' e x)</p></div><div class="top"><p class="src"><a name="v:mapMaybeC" class="def">mapMaybeC</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; n' e x) -&gt; <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> ex (<a href="Compiler-Hoopl.html#t:Block">Block</a> n e x) -&gt; <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> ex (<a href="Compiler-Hoopl.html#t:Block">Block</a> n' e x)</p></div><div class="top"><p class="src"><a name="v:mapBlock" class="def">mapBlock</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; n' e x) -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n' e x</p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:AGraph" class="def">AGraph</a> n e x </p><div class="doc"><p>The type of abstract graphs.  Offers extra <a href="smart constructors.html">smart constructors</a>
 that may consume fresh labels during construction.
</p></div><div class="subs instances"><p id="control.i:AGraph" class="caption collapser" onclick="toggleSection('i:AGraph')">Instances</p><div id="section.i:AGraph" class="show"><table><tr><td class="src">GraphRep <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:graphOfAGraph" class="def">graphOfAGraph</a> :: <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e x -&gt; <span class="keyword">forall</span> m. <a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> m =&gt; m (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x)</p><div class="doc"><p>Take an abstract <code><a href="Compiler-Hoopl.html#t:AGraph">AGraph</a></code>
 and make a concrete (if monadic)
 <code><a href="Compiler-Hoopl.html#t:Graph">Graph</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:aGraphOfGraph" class="def">aGraphOfGraph</a> ::  <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e x</p><div class="doc"><p>Take a graph and make it abstract.
</p></div></div><div class="top"><p class="src"><a name="v:-60--42--62-" class="def">(&lt;*&gt;)</a> :: (GraphRep g, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n) =&gt; g n e <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; g n e x</p><div class="doc"><p>Concatenate two graphs; control flows from left to right.
</p></div></div><div class="top"><p class="src"><a name="v:-124--42--62--60--42--124-" class="def">(|*&gt;&lt;*|)</a> :: (GraphRep g, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n) =&gt; g n e <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; g n <a href="Compiler-Hoopl.html#t:C">C</a> x -&gt; g n e x</p><div class="doc"><p>Splice together two graphs at a closed point; nothing is known
 about control flow.
</p></div></div><div class="top"><p class="src"><a name="v:catGraphs" class="def">catGraphs</a> :: (GraphRep g, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n) =&gt; [g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>] -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></p><div class="doc"><p>Conveniently concatenate a sequence of open/open graphs using <code><a href="Compiler-Hoopl.html#v:-60--42--62-">&lt;*&gt;</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:addEntrySeq" class="def">addEntrySeq</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> x -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x</p><div class="doc"><div class="warning"><p>Deprecated: use |*&gt;&lt;*| instead</p></div></div></div><div class="top"><p class="src"><a name="v:addExitSeq" class="def">addExitSeq</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e <a href="Compiler-Hoopl.html#t:O">O</a></p><div class="doc"><div class="warning"><p>Deprecated: use |*&gt;&lt;*| instead</p></div></div></div><div class="top"><p class="src"><a name="v:addBlocks" class="def">addBlocks</a> :: <a href="Compiler-Hoopl.html#t:HooplNode">HooplNode</a> n =&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e x</p><div class="doc"><p>Extend an existing <code><a href="Compiler-Hoopl.html#t:AGraph">AGraph</a></code> with extra basic blocks <a href="out of line.html">out of line</a>.
 No control flow is implied.  Simon PJ should give example use case.
</p></div></div><div class="top"><p class="src"><a name="v:unionBlocks" class="def">unionBlocks</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a></p><div class="doc"><div class="warning"><p>Deprecated: use |*&gt;&lt;*| instead</p></div></div></div><div class="top"><p class="src"><a name="v:emptyGraph" class="def">emptyGraph</a> :: GraphRep g =&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></p><div class="doc"><p>An empty graph that is open at entry and exit.  
 It is the left and right identity of <code><a href="Compiler-Hoopl.html#v:-60--42--62-">&lt;*&gt;</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:emptyClosedGraph" class="def">emptyClosedGraph</a> :: GraphRep g =&gt; g n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a></p><div class="doc"><p>An empty graph that is closed at entry and exit.  
 It is the left and right identity of <code><a href="Compiler-Hoopl.html#v:-124--42--62--60--42--124-">|*&gt;&lt;*|</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:withFresh" class="def">withFresh</a> :: Uniques u =&gt; (u -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e x) -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n e x</p></div><div class="top"><p class="src"><a name="v:mkFirst" class="def">mkFirst</a> :: GraphRep g =&gt; n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; g n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></p><div class="doc"><p>Create a graph from a first node
</p></div></div><div class="top"><p class="src"><a name="v:mkMiddle" class="def">mkMiddle</a> :: GraphRep g =&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></p><div class="doc"><p>Create a graph from a middle node
</p></div></div><div class="top"><p class="src"><a name="v:mkMiddles" class="def">mkMiddles</a> :: (GraphRep g, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n) =&gt; [n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>] -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></p><div class="doc"><p>Conveniently concatenate a sequence of middle nodes to form
 an open/open graph.
</p></div></div><div class="top"><p class="src"><a name="v:mkLast" class="def">mkLast</a> :: GraphRep g =&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></p><div class="doc"><p>Create a graph from a last node
</p></div></div><div class="top"><p class="src"><a name="v:mkBranch" class="def">mkBranch</a> :: (GraphRep g, <a href="Compiler-Hoopl.html#t:HooplNode">HooplNode</a> n) =&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></p><div class="doc"><p>Create a graph that branches to a label
</p></div></div><div class="top"><p class="src"><a name="v:mkLabel" class="def">mkLabel</a> :: (GraphRep g, <a href="Compiler-Hoopl.html#t:HooplNode">HooplNode</a> n) =&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; g n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></p><div class="doc"><p>Create a graph that defines a label
</p></div></div><div class="top"><p class="src"><a name="v:mkWhileDo" class="def">mkWhileDo</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="Compiler-Hoopl.html#t:HooplNode">HooplNode</a> n</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">=&gt; (<a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>)</td><td class="doc"><p>loop condition
</p></td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc"><p>body of the loop
</p></td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc"><p>the final while loop
</p></td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">class</span>  <a name="t:IfThenElseable" class="def">IfThenElseable</a> x  <span class="keyword">where</span></p><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:mkIfThenElse" class="def">mkIfThenElse</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="Compiler-Hoopl.html#t:HooplNode">HooplNode</a> n</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">=&gt; (<a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>)</td><td class="doc"><p>branch condition
</p></td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x</td><td class="doc"><p>code in the <a href="then.html">then</a> branch
</p></td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x</td><td class="doc"><p>code in the <a href="else.html">else</a> branch 
</p></td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:AGraph">AGraph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x</td><td class="doc"><p>resulting if-then-else construct
</p></td></tr></table></div><div class="doc"><p>Translate a high-level if-then-else construct into an <code><a href="Compiler-Hoopl.html#t:AGraph">AGraph</a></code>.
 The condition takes as arguments labels on the true-false branch
 and returns a single-entry, two-exit graph which exits to 
 the two labels.
</p></div></div><div class="subs instances"><p id="control.i:IfThenElseable" class="caption collapser" onclick="toggleSection('i:IfThenElseable')">Instances</p><div id="section.i:IfThenElseable" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:IfThenElseable">IfThenElseable</a> <a href="Compiler-Hoopl.html#t:C">C</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:IfThenElseable">IfThenElseable</a> <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:mkEntry" class="def">mkEntry</a> :: GraphRep g =&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; g n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></p><div class="doc"><p>Create a graph containing only an entry sequence
</p></div></div><div class="top"><p class="src"><a name="v:mkExit" class="def">mkExit</a> :: GraphRep g =&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; g n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></p><div class="doc"><p>Create a graph containing only an exit sequence
</p></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a name="t:HooplNode" class="def">HooplNode</a> n  <span class="keyword">where</span></p><div class="doc"><p>For some graph-construction operations and some optimizations,
 Hoopl must be able to create control-flow edges using a given node
 type <code>n</code>.
</p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:mkBranchNode" class="def">mkBranchNode</a> :: <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></p><div class="doc"><p>Create a branch node, the source of a control-flow edge.
</p></div><p class="src"><a name="v:mkLabelNode" class="def">mkLabelNode</a> :: <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></p><div class="doc"><p>Create a label node, the target (destination) of a control-flow edge.
</p></div></div></div><div class="top"><p class="src"><a name="v:firstXfer" class="def">firstXfer</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f) -&gt; n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; f</p><div class="doc"><p>A utility function so that a transfer function for a first
 node can be given just a fact; we handle the lookup.  This
 function is planned to be made obsolete by changes in the dataflow
 interface.
</p></div></div><div class="top"><p class="src"><a name="v:distributeXfer" class="def">distributeXfer</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; f) -&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f</p><div class="doc"><p>This utility function handles a common case in which a transfer function
 produces a single fact out of a last node, which is then distributed
 over the outgoing edges.
</p></div></div><div class="top"><p class="src"><a name="v:distributeFact" class="def">distributeFact</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f</p><div class="doc"><p>This utility function handles a common case in which a transfer function
 for a last node takes the incoming fact unchanged and simply distributes
 that fact over the outgoing edges.
</p></div></div><div class="top"><p class="src"><a name="v:distributeFactBwd" class="def">distributeFactBwd</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f</p><div class="doc"><p>This utility function handles a common case in which a backward transfer
 function takes the incoming fact unchanged and tags it with the node's label.
</p></div></div><div class="top"><p class="src"><a name="v:successorFacts" class="def">successorFacts</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; [f]</p><div class="doc"><p>List of (unlabelled) facts from the successors of a last node
</p></div></div><div class="top"><p class="src"><a name="v:joinFacts" class="def">joinFacts</a> ::  <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f -&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; [f] -&gt; f</p><div class="doc"><p>Join a list of facts.
</p></div></div><div class="top"><p class="src"><a name="v:joinOutFacts" class="def">joinOutFacts</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> node =&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f -&gt; node <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; f</p><div class="doc"><div class="warning"><p>Deprecated: should be replaced by 'joinFacts lat l (successorFacts n f)'; as is, it uses the wrong Label</p></div></div></div><div class="top"><p class="src"><a name="v:joinMaps" class="def">joinMaps</a> :: <a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> k =&gt; <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> v -&gt; <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> (<a href="../containers-0.4.2.1/Data-Map.html#t:Map">Map</a> k v)</p><div class="doc"><p>It's common to represent dataflow facts as a map from variables
 to some fact about the locations. For these maps, the join
 operation on the map can be expressed in terms of the join on each
 element of the codomain:
</p></div></div><div class="top"><p class="src"><a name="v:foldGraphNodes" class="def">foldGraphNodes</a> :: <span class="keyword">forall</span> n a.  (<span class="keyword">forall</span> e x.  n e x -&gt; a -&gt; a) -&gt; <span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x -&gt; a -&gt; a</p><div class="doc"><p>Fold a function over every node in a graph.
 The fold function must be polymorphic in the shape of the nodes.
</p></div></div><div class="top"><p class="src"><a name="v:foldBlockNodesF" class="def">foldBlockNodesF</a> :: <span class="keyword">forall</span> n a.  (<span class="keyword">forall</span> e x.  n e x -&gt; a -&gt; a) -&gt; <span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e a a -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x a a</p></div><div class="top"><p class="src"><a name="v:foldBlockNodesB" class="def">foldBlockNodesB</a> :: <span class="keyword">forall</span> n a.  (<span class="keyword">forall</span> e x.  n e x -&gt; a -&gt; a) -&gt; <span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x a a -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e a a</p></div><div class="top"><p class="src"><a name="v:foldBlockNodesF3" class="def">foldBlockNodesF3</a> :: <span class="keyword">forall</span> n a b c.  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; a -&gt; b, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; b -&gt; b, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; b -&gt; c) -&gt; <span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e a b -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x c b</p><div class="doc"><p>Fold a function over every node in a block, forward or backward.
 The fold function must be polymorphic in the shape of the nodes.
</p></div></div><div class="top"><p class="src"><a name="v:foldBlockNodesB3" class="def">foldBlockNodesB3</a> :: <span class="keyword">forall</span> n a b c.  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; b -&gt; c, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; b -&gt; b, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; a -&gt; b) -&gt; <span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x a b -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e c b</p></div><div class="top"><p class="src"><a name="v:tfFoldBlock" class="def">tfFoldBlock</a> :: <span class="keyword">forall</span> n bc bo c e x.  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; bc, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e bc bo -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e bc bo, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e bc bo -&gt; c) -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; bo -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x c (<a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e bc bo)</p><div class="doc"><p>A fold function that relies on the IndexedCO type function.
   Note that the type parameter e is available to the functions
   that are applied to the middle and last nodes.
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:ScottBlock" class="def">ScottBlock</a> n a </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:ScottBlock" class="def">ScottBlock</a> (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; a <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>) (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; a <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>) (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; a <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>) (<span class="keyword">forall</span> e x.  a e <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; a <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; a e x)</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><a name="v:scottFoldBlock" class="def">scottFoldBlock</a> :: <span class="keyword">forall</span> n a e x.  <a href="Compiler-Hoopl.html#t:ScottBlock">ScottBlock</a> n a -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; a e x</p></div><div class="top"><p class="src"><a name="v:fbnf3" class="def">fbnf3</a> :: <span class="keyword">forall</span> n a b c.  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; a -&gt; b, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; b -&gt; b, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; b -&gt; c) -&gt; <span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e a b -&gt; <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x c b</p></div><div class="top"><p class="src"><a name="v:blockToNodeList" class="def">blockToNodeList</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; (<a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> e (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>), [n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>], <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> x (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))</p><div class="doc"><div class="warning"><p>Deprecated: What justifies these functions?  Can they be eliminated?  Replaced with folds?</p></div><p>Convert a block to a list of nodes. The entry and exit node
 is or is not present depending on the shape of the block.
</p><p>The blockToNodeList function cannot be currently expressed using
 foldBlockNodesB, because it returns IndexedCO e a b, which means
 two different types depending on the shape of the block entry.
 But blockToNodeList returns one of four possible types, depending
 on the shape of the block entry *and* exit.
</p></div></div><div class="top"><p class="src"><a name="v:blockOfNodeList" class="def">blockOfNodeList</a> ::  (<a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> e (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>), [n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>], <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> x (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>)) -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x</p><div class="doc"><div class="warning"><p>Deprecated: What justifies these functions?  Can they be eliminated?  Replaced with folds?</p></div><p>Convert a list of nodes to a block. The entry and exit node
 must or must not be present depending on the shape of the block.
</p></div></div><div class="top"><p class="src"><a name="v:blockToNodeList-39-" class="def">blockToNodeList'</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; (<a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> e (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>), [n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>], <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> x (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))</p></div><div class="top"><p class="src"><a name="v:blockToNodeList-39--39-" class="def">blockToNodeList''</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; (<a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> e (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>), [n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>], <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> x (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))</p></div><div class="top"><p class="src"><a name="v:blockToNodeList-39--39--39-" class="def">blockToNodeList'''</a> :: <span class="keyword">forall</span> n e x. (<a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> e (NodeList' <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> n) (NodeList' <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> n) ~ NodeList' e <a href="Compiler-Hoopl.html#t:O">O</a> n, <a href="Compiler-Hoopl.html#t:IndexedCO">IndexedCO</a> x (NodeList' e <a href="Compiler-Hoopl.html#t:C">C</a> n) (NodeList' e <a href="Compiler-Hoopl.html#t:O">O</a> n) ~ NodeList' e x n) =&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; NodeList' e x n</p></div><div class="top"><p class="src"><a name="v:analyzeAndRewriteFwdBody" class="def">analyzeAndRewriteFwdBody</a> :: <span class="keyword">forall</span> m n f entries. (<a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> entries) =&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f -&gt; entries -&gt; <a href="Compiler-Hoopl.html#t:Body">Body</a> n -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; m (<a href="Compiler-Hoopl.html#t:Body">Body</a> n, <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f)</p><div class="doc"><p>Forward dataflow analysis and rewriting for the special case of a Body.
 A set of entry points must be supplied; blocks not reachable from
 the set are thrown away.
</p></div></div><div class="top"><p class="src"><a name="v:analyzeAndRewriteBwdBody" class="def">analyzeAndRewriteBwdBody</a> :: <span class="keyword">forall</span> m n f entries. (<a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> entries) =&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f -&gt; entries -&gt; <a href="Compiler-Hoopl.html#t:Body">Body</a> n -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; m (<a href="Compiler-Hoopl.html#t:Body">Body</a> n, <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f)</p><div class="doc"><p>Backward dataflow analysis and rewriting for the special case of a Body.
 A set of entry points must be supplied; blocks not reachable from
 the set are thrown away.
</p></div></div><div class="top"><p class="src"><a name="v:analyzeAndRewriteFwdOx" class="def">analyzeAndRewriteFwdOx</a> :: <span class="keyword">forall</span> m n f x. (<a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n) =&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; f -&gt; m (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x, <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f, <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> x f)</p><div class="doc"><p>Forward dataflow analysis and rewriting for the special case of a 
 graph open at the entry.  This special case relieves the client
 from having to specify a type signature for <code><a href="Compiler-Hoopl.html#v:NothingO">NothingO</a></code>, which beginners
 might find confusing and experts might find annoying.
</p></div></div><div class="top"><p class="src"><a name="v:analyzeAndRewriteBwdOx" class="def">analyzeAndRewriteBwdOx</a> :: <span class="keyword">forall</span> m n f x. (<a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n) =&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f -&gt; m (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x, <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f, f)</p><div class="doc"><p>Backward dataflow analysis and rewriting for the special case of a 
 graph open at the entry.  This special case relieves the client
 from having to specify a type signature for <code><a href="Compiler-Hoopl.html#v:NothingO">NothingO</a></code>, which beginners
 might find confusing and experts might find annoying.
</p></div></div><div class="top"><p class="src"><a name="v:noEntries" class="def">noEntries</a> :: <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:Label">Label</a></p><div class="doc"><p>A value that can be used for the entry point of a graph open at the entry.
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:BlockResult" class="def">BlockResult</a> n x <span class="keyword">where</span></p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:NoBlock" class="def">NoBlock</a> ::  <a href="Compiler-Hoopl.html#t:BlockResult">BlockResult</a> n x</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:BodyBlock" class="def">BodyBlock</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:BlockResult">BlockResult</a> n x</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:ExitBlock" class="def">ExitBlock</a> ::  <a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:BlockResult">BlockResult</a> n <a href="Compiler-Hoopl.html#t:O">O</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><a name="v:lookupBlock" class="def">lookupBlock</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:BlockResult">BlockResult</a> n x</p></div><div class="top"><p class="src"><span class="keyword">class</span>  <a name="t:IsSet" class="def">IsSet</a> set  <span class="keyword">where</span></p><div class="subs associated-types"><p class="caption">Associated Types</p><p class="src"><span class="keyword">type</span> <a name="t:ElemOf" class="def">ElemOf</a> set </p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:setNull" class="def">setNull</a> :: set -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><p class="src"><a name="v:setSize" class="def">setSize</a> :: set -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></p><p class="src"><a name="v:setMember" class="def">setMember</a> :: <a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set -&gt; set -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><p class="src"><a name="v:setEmpty" class="def">setEmpty</a> :: set</p><p class="src"><a name="v:setSingleton" class="def">setSingleton</a> :: <a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set -&gt; set</p><p class="src"><a name="v:setInsert" class="def">setInsert</a> :: <a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set -&gt; set -&gt; set</p><p class="src"><a name="v:setDelete" class="def">setDelete</a> :: <a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set -&gt; set -&gt; set</p><p class="src"><a name="v:setUnion" class="def">setUnion</a> :: set -&gt; set -&gt; set</p><p class="src"><a name="v:setDifference" class="def">setDifference</a> :: set -&gt; set -&gt; set</p><p class="src"><a name="v:setIntersection" class="def">setIntersection</a> :: set -&gt; set -&gt; set</p><p class="src"><a name="v:setIsSubsetOf" class="def">setIsSubsetOf</a> :: set -&gt; set -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><p class="src"><a name="v:setFold" class="def">setFold</a> ::  (<a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set -&gt; b -&gt; b) -&gt; b -&gt; set -&gt; b</p><p class="src"><a name="v:setElems" class="def">setElems</a> :: set -&gt; [<a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set]</p><p class="src"><a name="v:setFromList" class="def">setFromList</a> :: [<a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set] -&gt; set</p></div><div class="subs instances"><p id="control.i:IsSet" class="caption collapser" onclick="toggleSection('i:IsSet')">Instances</p><div id="section.i:IsSet" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:IsSet">IsSet</a> <a href="Compiler-Hoopl.html#t:UniqueSet">UniqueSet</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:IsSet">IsSet</a> <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:setInsertList" class="def">setInsertList</a> :: <a href="Compiler-Hoopl.html#t:IsSet">IsSet</a> set =&gt; [<a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set] -&gt; set -&gt; set</p></div><div class="top"><p class="src"><a name="v:setDeleteList" class="def">setDeleteList</a> :: <a href="Compiler-Hoopl.html#t:IsSet">IsSet</a> set =&gt; [<a href="Compiler-Hoopl.html#t:ElemOf">ElemOf</a> set] -&gt; set -&gt; set</p></div><div class="top"><p class="src"><a name="v:setUnions" class="def">setUnions</a> :: <a href="Compiler-Hoopl.html#t:IsSet">IsSet</a> set =&gt; [set] -&gt; set</p></div><div class="top"><p class="src"><span class="keyword">class</span>  <a name="t:IsMap" class="def">IsMap</a> map  <span class="keyword">where</span></p><div class="subs associated-types"><p class="caption">Associated Types</p><p class="src"><span class="keyword">type</span> <a name="t:KeyOf" class="def">KeyOf</a> map </p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:mapNull" class="def">mapNull</a> ::  map a -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><p class="src"><a name="v:mapSize" class="def">mapSize</a> ::  map a -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></p><p class="src"><a name="v:mapMember" class="def">mapMember</a> ::  <a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; map a -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><p class="src"><a name="v:mapLookup" class="def">mapLookup</a> ::  <a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; map a -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a</p><p class="src"><a name="v:mapFindWithDefault" class="def">mapFindWithDefault</a> ::  a -&gt; <a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; map a -&gt; a</p><p class="src"><a name="v:mapEmpty" class="def">mapEmpty</a> ::  map a</p><p class="src"><a name="v:mapSingleton" class="def">mapSingleton</a> ::  <a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; a -&gt; map a</p><p class="src"><a name="v:mapInsert" class="def">mapInsert</a> ::  <a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; a -&gt; map a -&gt; map a</p><p class="src"><a name="v:mapDelete" class="def">mapDelete</a> ::  <a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; map a -&gt; map a</p><p class="src"><a name="v:mapUnion" class="def">mapUnion</a> ::  map a -&gt; map a -&gt; map a</p><p class="src"><a name="v:mapUnionWithKey" class="def">mapUnionWithKey</a> ::  (<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; a -&gt; a -&gt; a) -&gt; map a -&gt; map a -&gt; map a</p><p class="src"><a name="v:mapDifference" class="def">mapDifference</a> ::  map a -&gt; map a -&gt; map a</p><p class="src"><a name="v:mapIntersection" class="def">mapIntersection</a> ::  map a -&gt; map a -&gt; map a</p><p class="src"><a name="v:mapIsSubmapOf" class="def">mapIsSubmapOf</a> :: <a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; map a -&gt; map a -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><p class="src"><a name="v:mapMap" class="def">mapMap</a> ::  (a -&gt; b) -&gt; map a -&gt; map b</p><p class="src"><a name="v:mapMapWithKey" class="def">mapMapWithKey</a> ::  (<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; a -&gt; b) -&gt; map a -&gt; map b</p><p class="src"><a name="v:mapFold" class="def">mapFold</a> ::  (a -&gt; b -&gt; b) -&gt; b -&gt; map a -&gt; b</p><p class="src"><a name="v:mapFoldWithKey" class="def">mapFoldWithKey</a> ::  (<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map -&gt; a -&gt; b -&gt; b) -&gt; b -&gt; map a -&gt; b</p><p class="src"><a name="v:mapElems" class="def">mapElems</a> ::  map a -&gt; [a]</p><p class="src"><a name="v:mapKeys" class="def">mapKeys</a> ::  map a -&gt; [<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map]</p><p class="src"><a name="v:mapToList" class="def">mapToList</a> ::  map a -&gt; [(<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map, a)]</p><p class="src"><a name="v:mapFromList" class="def">mapFromList</a> ::  [(<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map, a)] -&gt; map a</p></div><div class="subs instances"><p id="control.i:IsMap" class="caption collapser" onclick="toggleSection('i:IsMap')">Instances</p><div id="section.i:IsMap" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:IsMap">IsMap</a> <a href="Compiler-Hoopl.html#t:UniqueMap">UniqueMap</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:IsMap">IsMap</a> <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:mapInsertList" class="def">mapInsertList</a> :: <a href="Compiler-Hoopl.html#t:IsMap">IsMap</a> map =&gt; [(<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map, a)] -&gt; map a -&gt; map a</p></div><div class="top"><p class="src"><a name="v:mapDeleteList" class="def">mapDeleteList</a> :: <a href="Compiler-Hoopl.html#t:IsMap">IsMap</a> map =&gt; [<a href="Compiler-Hoopl.html#t:KeyOf">KeyOf</a> map] -&gt; map a -&gt; map a</p></div><div class="top"><p class="src"><a name="v:mapUnions" class="def">mapUnions</a> :: <a href="Compiler-Hoopl.html#t:IsMap">IsMap</a> map =&gt; [map a] -&gt; map a</p></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a name="t:CheckpointMonad" class="def">CheckpointMonad</a> m  <span class="keyword">where</span></p><div class="doc"><p>Obeys the following law:
 for all <code>m</code> 
 <code>
    do { s &lt;- checkpoint; m; restart s } == return ()
 </code>
</p></div><div class="subs associated-types"><p class="caption">Associated Types</p><p class="src"><span class="keyword">type</span> <a name="t:Checkpoint" class="def">Checkpoint</a> m </p></div><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:checkpoint" class="def">checkpoint</a> :: m (<a href="Compiler-Hoopl.html#t:Checkpoint">Checkpoint</a> m)</p><p class="src"><a name="v:restart" class="def">restart</a> :: <a href="Compiler-Hoopl.html#t:Checkpoint">Checkpoint</a> m -&gt; m ()</p></div><div class="subs instances"><p id="control.i:CheckpointMonad" class="caption collapser" onclick="toggleSection('i:CheckpointMonad')">Instances</p><div id="section.i:CheckpointMonad" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> <a href="Compiler-Hoopl.html#t:SimpleUniqueMonad">SimpleUniqueMonad</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m =&gt; <a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> (<a href="Compiler-Hoopl.html#t:InfiniteFuelMonad">InfiniteFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m =&gt; <a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> (<a href="Compiler-Hoopl.html#t:CheckingFuelMonad">CheckingFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:DataflowLattice" class="def">DataflowLattice</a> a </p><div class="doc"><p>A transfer function might want to use the logging flag
 to control debugging, as in for example, it updates just one element
 in a big finite map.  We don't want Hoopl to show the whole fact,
 and only the transfer function knows exactly what changed.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:DataflowLattice" class="def">DataflowLattice</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:fact_name" class="def">fact_name</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:fact_bot" class="def">fact_bot</a> :: a</dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:fact_join" class="def">fact_join</a> :: <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> a</dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:JoinFun" class="def">JoinFun</a> a = <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:OldFact">OldFact</a> a -&gt; <a href="Compiler-Hoopl.html#t:NewFact">NewFact</a> a -&gt; (<a href="Compiler-Hoopl.html#t:ChangeFlag">ChangeFlag</a>, a)</p></div><div class="top"><p class="src"><span class="keyword">newtype</span>  <a name="t:OldFact" class="def">OldFact</a> a </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:OldFact" class="def">OldFact</a> a</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">newtype</span>  <a name="t:NewFact" class="def">NewFact</a> a </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:NewFact" class="def">NewFact</a> a</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">type family</span> <a name="t:Fact" class="def">Fact</a> x f :: *</p></div><div class="top"><p class="src"><a name="v:mkFactBase" class="def">mkFactBase</a> :: <span class="keyword">forall</span> f.  <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f -&gt; [(<a href="Compiler-Hoopl.html#t:Label">Label</a>, f)] -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f</p><div class="doc"><p><code><a href="Compiler-Hoopl.html#v:mkFactBase">mkFactBase</a></code> creates a <code><a href="Compiler-Hoopl.html#t:FactBase">FactBase</a></code> from a list of (<code><a href="Compiler-Hoopl.html#t:Label">Label</a></code>, fact)
 pairs.  If the same label appears more than once, the relevant facts
 are joined.
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:ChangeFlag" class="def">ChangeFlag</a>  </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:NoChange" class="def">NoChange</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:SomeChange" class="def">SomeChange</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:ChangeFlag" class="caption collapser" onclick="toggleSection('i:ChangeFlag')">Instances</p><div id="section.i:ChangeFlag" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Compiler-Hoopl.html#t:ChangeFlag">ChangeFlag</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="Compiler-Hoopl.html#t:ChangeFlag">ChangeFlag</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:changeIf" class="def">changeIf</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> -&gt; <a href="Compiler-Hoopl.html#t:ChangeFlag">ChangeFlag</a></p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:FwdPass" class="def">FwdPass</a> m n f </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:FwdPass" class="def">FwdPass</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:fp_lattice" class="def">fp_lattice</a> :: <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f</dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:fp_transfer" class="def">fp_transfer</a> :: <a href="Compiler-Hoopl.html#t:FwdTransfer">FwdTransfer</a> n f</dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:fp_rewrite" class="def">fp_rewrite</a> :: <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:FwdTransfer" class="def">FwdTransfer</a> n f </p></div><div class="top"><p class="src"><a name="v:mkFTransfer" class="def">mkFTransfer</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; f -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f) -&gt; <a href="Compiler-Hoopl.html#t:FwdTransfer">FwdTransfer</a> n f</p></div><div class="top"><p class="src"><a name="v:mkFTransfer3" class="def">mkFTransfer3</a> ::  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f) -&gt; <a href="Compiler-Hoopl.html#t:FwdTransfer">FwdTransfer</a> n f</p></div><div class="top"><p class="src"><a name="v:getFTransfer3" class="def">getFTransfer3</a> :: <a href="Compiler-Hoopl.html#t:FwdTransfer">FwdTransfer</a> n f -&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f)</p></div><h1 id="g:1">Respecting Fuel
</h1><div class="doc"><p>A value of type <code><a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a></code> or <code><a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a></code> <em>respects fuel</em> if 
 any function contained within the value satisfies the following properties:
</p><ul><li> When fuel is exhausted, it always returns <code><a href="../base-4.5.1.0/Data-Maybe.html#v:Nothing">Nothing</a></code>.
</li><li> When it returns <code>Just g rw</code>, it consumes <em>exactly</em> one unit
     of fuel, and new rewrite <code>rw</code> also respects fuel.
</li></ul><p>Provided that functions passed to <code><a href="Compiler-Hoopl.html#v:mkFRewrite">mkFRewrite</a></code>, <code><a href="Compiler-Hoopl.html#v:mkFRewrite3">mkFRewrite3</a></code>, 
 <code><a href="Compiler-Hoopl.html#v:mkBRewrite">mkBRewrite</a></code>, and <code><a href="Compiler-Hoopl.html#v:mkBRewrite3">mkBRewrite3</a></code> are not aware of the fuel supply,
 the results respect fuel.
</p><p>It is an <em>unchecked</em> run-time error for the argument passed to <code><a href="Compiler-Hoopl.html#v:wrapFR">wrapFR</a></code>,
 <code><a href="Compiler-Hoopl.html#v:wrapFR2">wrapFR2</a></code>, <code><a href="Compiler-Hoopl.html#v:wrapBR">wrapBR</a></code>, or <code>warpBR2</code> to return a function that does not respect fuel.
</p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:FwdRewrite" class="def">FwdRewrite</a> m n f </p></div><div class="top"><p class="src"><a name="v:mkFRewrite" class="def">mkFRewrite</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (<span class="keyword">forall</span> e x.  n e x -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n e x))) -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</p><div class="doc"><p>Functions passed to <code><a href="Compiler-Hoopl.html#v:mkFRewrite">mkFRewrite</a></code> should not be aware of the fuel supply.
 The result returned by <code><a href="Compiler-Hoopl.html#v:mkFRewrite">mkFRewrite</a></code> respects fuel.
</p></div></div><div class="top"><p class="src"><a name="v:mkFRewrite3" class="def">mkFRewrite3</a> :: <span class="keyword">forall</span> m n f. <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))) -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</p><div class="doc"><p>Functions passed to <code><a href="Compiler-Hoopl.html#v:mkFRewrite3">mkFRewrite3</a></code> should not be aware of the fuel supply.
 The result returned by <code><a href="Compiler-Hoopl.html#v:mkFRewrite3">mkFRewrite3</a></code> respects fuel.
</p></div></div><div class="top"><p class="src"><a name="v:getFRewrite3" class="def">getFRewrite3</a> :: <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f -&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f)), n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f)), n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f)))</p></div><div class="top"><p class="src"><a name="v:noFwdRewrite" class="def">noFwdRewrite</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</p></div><div class="top"><p class="src"><a name="v:wrapFR" class="def">wrapFR</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: (<span class="keyword">forall</span> e x.  (n e x -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n e x, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f))) -&gt; n' e x -&gt; f' -&gt; m' (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n' e x, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m' n' f')))</td><td class="doc"><p>This argument may assume that any function passed to it
 respects fuel, and it must return a result that respects fuel.
</p></td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m' n' f'</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><a name="v:wrapFR2" class="def">wrapFR2</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: (<span class="keyword">forall</span> e x.  (n1 e x -&gt; f1 -&gt; m1 (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n1 e x, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m1 n1 f1))) -&gt; (n2 e x -&gt; f2 -&gt; m2 (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n2 e x, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m2 n2 f2))) -&gt; n3 e x -&gt; f3 -&gt; m3 (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n3 e x, <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m3 n3 f3)))</td><td class="doc"><p>This argument may assume that any function passed to it
 respects fuel, and it must return a result that respects fuel.
</p></td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m1 n1 f1</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m2 n2 f2</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m3 n3 f3</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:BwdPass" class="def">BwdPass</a> m n f </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:BwdPass" class="def">BwdPass</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:bp_lattice" class="def">bp_lattice</a> :: <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f</dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:bp_transfer" class="def">bp_transfer</a> :: <a href="Compiler-Hoopl.html#t:BwdTransfer">BwdTransfer</a> n f</dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:bp_rewrite" class="def">bp_rewrite</a> :: <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:BwdTransfer" class="def">BwdTransfer</a> n f </p></div><div class="top"><p class="src"><a name="v:mkBTransfer" class="def">mkBTransfer</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f -&gt; f) -&gt; <a href="Compiler-Hoopl.html#t:BwdTransfer">BwdTransfer</a> n f</p></div><div class="top"><p class="src"><a name="v:mkBTransfer3" class="def">mkBTransfer3</a> ::  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; f) -&gt; <a href="Compiler-Hoopl.html#t:BwdTransfer">BwdTransfer</a> n f</p></div><div class="top"><p class="src"><a name="v:getBTransfer3" class="def">getBTransfer3</a> :: <a href="Compiler-Hoopl.html#t:BwdTransfer">BwdTransfer</a> n f -&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; f, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; f)</p></div><div class="top"><p class="src"><a name="v:wrapBR" class="def">wrapBR</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: (<span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Shape">Shape</a> x -&gt; (n e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n e x, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f))) -&gt; n' e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f' -&gt; m' (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n' e x, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m' n' f')))</td><td class="doc"><p>This argument may assume that any function passed to it
 respects fuel, and it must return a result that respects fuel.
</p></td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m' n' f'</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><a name="v:wrapBR2" class="def">wrapBR2</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: (<span class="keyword">forall</span> e x.  <a href="Compiler-Hoopl.html#t:Shape">Shape</a> x -&gt; (n1 e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f1 -&gt; m1 (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n1 e x, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m1 n1 f1))) -&gt; (n2 e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f2 -&gt; m2 (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n2 e x, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m2 n2 f2))) -&gt; n3 e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f3 -&gt; m3 (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n3 e x, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m3 n3 f3)))</td><td class="doc"><p>This argument may assume that any function passed to it
 respects fuel, and it must return a result that respects fuel.
</p></td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m1 n1 f1</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m2 n2 f2</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">-&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m3 n3 f3</td><td class="doc empty">&nbsp;</td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:BwdRewrite" class="def">BwdRewrite</a> m n f </p></div><div class="top"><p class="src"><a name="v:mkBRewrite" class="def">mkBRewrite</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (<span class="keyword">forall</span> e x.  n e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n e x))) -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</p><div class="doc"><p>Functions passed to <code><a href="Compiler-Hoopl.html#v:mkBRewrite">mkBRewrite</a></code> should not be aware of the fuel supply.
 The result returned by <code><a href="Compiler-Hoopl.html#v:mkBRewrite">mkBRewrite</a></code> respects fuel.
</p></div></div><div class="top"><p class="src"><a name="v:mkBRewrite3" class="def">mkBRewrite3</a> :: <span class="keyword">forall</span> m n f. <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))) -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</p><div class="doc"><p>Functions passed to <code><a href="Compiler-Hoopl.html#v:mkBRewrite3">mkBRewrite3</a></code> should not be aware of the fuel supply.
 The result returned by <code><a href="Compiler-Hoopl.html#v:mkBRewrite3">mkBRewrite3</a></code> respects fuel.
</p></div></div><div class="top"><p class="src"><a name="v:getBRewrite3" class="def">getBRewrite3</a> :: <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f -&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f)), n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f)), n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (Graph n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>, <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f)))</p></div><div class="top"><p class="src"><a name="v:noBwdRewrite" class="def">noBwdRewrite</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</p></div><div class="top"><p class="src"><a name="v:analyzeAndRewriteFwd" class="def">analyzeAndRewriteFwd</a> :: <span class="keyword">forall</span> m n f e x entries. (<a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> entries) =&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> e entries -&gt; Graph n e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> e f -&gt; m (Graph n e x, <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f, <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> x f)</p><div class="doc"><p>if the graph being analyzed is open at the entry, there must
   be no other entry point, or all goes horribly wrong...
</p></div></div><div class="top"><p class="src"><a name="v:analyzeAndRewriteBwd" class="def">analyzeAndRewriteBwd</a> :: (<a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m, <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> entries) =&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:MaybeC">MaybeC</a> e entries -&gt; Graph n e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f -&gt; m (Graph n e x, <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f, <a href="Compiler-Hoopl.html#t:MaybeO">MaybeO</a> e f)</p><div class="doc"><p>if the graph being analyzed is open at the exit, I don't
   quite understand the implications of possible other exits
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Label" class="def">Label</a>  </p><div class="subs instances"><p id="control.i:Label" class="caption collapser" onclick="toggleSection('i:Label')">Instances</p><div id="section.i:Label" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Compiler-Hoopl.html#t:Label">Label</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="Compiler-Hoopl.html#t:Label">Label</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> <a href="Compiler-Hoopl.html#t:Label">Label</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> <a href="Compiler-Hoopl.html#t:Label">Label</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">Uniques <a href="Compiler-Hoopl.html#t:Label">Label</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:freshLabel" class="def">freshLabel</a> :: <a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> m =&gt; m <a href="Compiler-Hoopl.html#t:Label">Label</a></p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:LabelSet" class="def">LabelSet</a>  </p><div class="subs instances"><p id="control.i:LabelSet" class="caption collapser" onclick="toggleSection('i:LabelSet')">Instances</p><div id="section.i:LabelSet" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</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="Compiler-Hoopl.html#t:LabelSet">LabelSet</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:IsSet">IsSet</a> <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:LabelMap" class="def">LabelMap</a> v </p><div class="subs instances"><p id="control.i:LabelMap" class="caption collapser" onclick="toggleSection('i:LabelMap')">Instances</p><div id="section.i:LabelMap" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:IsMap">IsMap</a> <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> v =&gt; <a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> (<a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> v)</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> v =&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> (<a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> v)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> v =&gt; <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> (<a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> v)</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:FactBase" class="def">FactBase</a> f = <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> f</p></div><div class="top"><p class="src"><a name="v:noFacts" class="def">noFacts</a> ::  <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f</p></div><div class="top"><p class="src"><a name="v:lookupFact" class="def">lookupFact</a> ::  <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> f</p></div><div class="top"><p class="src"><a name="v:uniqueToLbl" class="def">uniqueToLbl</a> :: <a href="Compiler-Hoopl.html#t:Unique">Unique</a> -&gt; <a href="Compiler-Hoopl.html#t:Label">Label</a></p></div><div class="top"><p class="src"><a name="v:lblToUnique" class="def">lblToUnique</a> :: <a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:Unique">Unique</a></p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Pointed" class="def">Pointed</a> t b a <span class="keyword">where</span></p><div class="doc"><p>Adds top, bottom, or both to help form a lattice
</p><p>The type parameters <code>t</code> and <code>b</code> are used to say whether top
 and bottom elements have been added.  The analogy with <code><a href="Compiler-Hoopl.html#t:Block">Block</a></code>
 is nearly exact:
</p><ul><li> A <code><a href="Compiler-Hoopl.html#t:Block">Block</a></code> is closed at the entry if and only if it has a first node;
    a <code><a href="Compiler-Hoopl.html#t:Pointed">Pointed</a></code> is closed at the top if and only if it has a top element.
</li><li> A <code><a href="Compiler-Hoopl.html#t:Block">Block</a></code> is closed at the exit if and only if it has a last node;
    a <code><a href="Compiler-Hoopl.html#t:Pointed">Pointed</a></code> is closed at the bottom if and only if it has a bottom element.
</li></ul><p>We thus have four possible types, of which three are interesting:
</p><dl><dt><code>Pointed C C a</code></dt><dd> Type <code>a</code> extended with both top and bottom elements.
</dd><dt><code>Pointed C O a</code></dt><dd> Type <code>a</code> extended with a top element
  only. (Presumably <code>a</code> comes equipped with a bottom element of its own.)
</dd><dt><code>Pointed O C a</code></dt><dd> Type <code>a</code> extended with a bottom element only. 
</dd><dt><code>Pointed O O a</code></dt><dd> Isomorphic to <code>a</code>, and therefore not interesting.
</dd></dl><p>The advantage of all this GADT-ishness is that the constructors
 <code><a href="Compiler-Hoopl.html#v:Bot">Bot</a></code>, <code><a href="Compiler-Hoopl.html#v:Top">Top</a></code>, and <code><a href="Compiler-Hoopl.html#v:PElem">PElem</a></code> can all be used polymorphically.
</p><p>A 'Pointed t b' type is an instance of <code><a href="../base-4.5.1.0/Control-Monad.html#t:Functor">Functor</a></code> and <code><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a></code>.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Bot" class="def">Bot</a> ::  <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t <a href="Compiler-Hoopl.html#t:C">C</a> a</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:PElem" class="def">PElem</a> ::  a -&gt; <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t b a</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Top" class="def">Top</a> ::  <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> <a href="Compiler-Hoopl.html#t:C">C</a> b a</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:Pointed" class="caption collapser" onclick="toggleSection('i:Pointed')">Instances</p><div id="section.i:Pointed" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Functor">Functor</a> (<a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> a =&gt; <a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> (<a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t b 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 =&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> (<a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t b a)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> a =&gt; <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> (<a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t b a)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:addPoints" class="def">addPoints</a> ::  <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> a -&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> (<a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t <a href="Compiler-Hoopl.html#t:C">C</a> a)</p><div class="doc"><p>Given a join function and a name, creates a semi lattice by
 adding a bottom element, and possibly a top element also.
 A specialized version of <code><a href="Compiler-Hoopl.html#v:addPoints-39-">addPoints'</a></code>.
</p></div></div><div class="top"><p class="src"><a name="v:addPoints-39-" class="def">addPoints'</a> :: <span class="keyword">forall</span> a t.  <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; (<a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:OldFact">OldFact</a> a -&gt; <a href="Compiler-Hoopl.html#t:NewFact">NewFact</a> a -&gt; (<a href="Compiler-Hoopl.html#t:ChangeFlag">ChangeFlag</a>, <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t <a href="Compiler-Hoopl.html#t:C">C</a> a)) -&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> (<a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> t <a href="Compiler-Hoopl.html#t:C">C</a> a)</p><div class="doc"><p>A more general case for creating a new lattice
</p></div></div><div class="top"><p class="src"><a name="v:addTop" class="def">addTop</a> ::  <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> a -&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> (<a href="Compiler-Hoopl.html#t:WithTop">WithTop</a> a)</p><div class="doc"><p>Given a join function and a name, creates a semi lattice by
 adding a top element but no bottom element.  Caller must supply the bottom 
 element.
</p></div></div><div class="top"><p class="src"><a name="v:addTop-39-" class="def">addTop'</a> :: <span class="keyword">forall</span> a.  <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; a -&gt; (<a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:OldFact">OldFact</a> a -&gt; <a href="Compiler-Hoopl.html#t:NewFact">NewFact</a> a -&gt; (<a href="Compiler-Hoopl.html#t:ChangeFlag">ChangeFlag</a>, <a href="Compiler-Hoopl.html#t:WithTop">WithTop</a> a)) -&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> (<a href="Compiler-Hoopl.html#t:WithTop">WithTop</a> a)</p><div class="doc"><p>A more general case for creating a new lattice
</p></div></div><div class="top"><p class="src"><a name="v:liftJoinTop" class="def">liftJoinTop</a> ::  <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> a -&gt; <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> (<a href="Compiler-Hoopl.html#t:WithTop">WithTop</a> a)</p></div><div class="top"><p class="src"><a name="v:extendJoinDomain" class="def">extendJoinDomain</a> :: <span class="keyword">forall</span> a.  (<a href="Compiler-Hoopl.html#t:Label">Label</a> -&gt; <a href="Compiler-Hoopl.html#t:OldFact">OldFact</a> a -&gt; <a href="Compiler-Hoopl.html#t:NewFact">NewFact</a> a -&gt; (<a href="Compiler-Hoopl.html#t:ChangeFlag">ChangeFlag</a>, <a href="Compiler-Hoopl.html#t:WithTop">WithTop</a> a)) -&gt; <a href="Compiler-Hoopl.html#t:JoinFun">JoinFun</a> (<a href="Compiler-Hoopl.html#t:WithTop">WithTop</a> a)</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:WithTop" class="def">WithTop</a> a = <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> a</p><div class="doc"><p>Type <code>a</code> with a top element adjoined
</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:WithBot" class="def">WithBot</a> a = <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> a</p><div class="doc"><p>Type <code>a</code> with a bottom element adjoined
</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:WithTopAndBot" class="def">WithTopAndBot</a> a = <a href="Compiler-Hoopl.html#t:Pointed">Pointed</a> <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> a</p><div class="doc"><p>Type <code>a</code> with top and bottom elements adjoined
</p></div></div><div class="top"><p class="src"><a name="v:thenFwdRw" class="def">thenFwdRw</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</p></div><div class="top"><p class="src"><a name="v:deepFwdRw3" class="def">deepFwdRw3</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))) -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</p></div><div class="top"><p class="src"><a name="v:deepFwdRw" class="def">deepFwdRw</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (<span class="keyword">forall</span> e x.  n e x -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x))) -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</p></div><div class="top"><p class="src"><a name="v:iterFwdRw" class="def">iterFwdRw</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdRewrite">FwdRewrite</a> m n f</p></div><div class="top"><p class="src"><a name="v:thenBwdRw" class="def">thenBwdRw</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</p></div><div class="top"><p class="src"><a name="v:deepBwdRw3" class="def">deepBwdRw3</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>))) -&gt; (n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>))) -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</p></div><div class="top"><p class="src"><a name="v:deepBwdRw" class="def">deepBwdRw</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; (<span class="keyword">forall</span> e x.  n e x -&gt; <a href="Compiler-Hoopl.html#t:Fact">Fact</a> x f -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> (<a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x))) -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</p></div><div class="top"><p class="src"><a name="v:iterBwdRw" class="def">iterBwdRw</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdRewrite">BwdRewrite</a> m n f</p></div><div class="top"><p class="src"><a name="v:pairFwd" class="def">pairFwd</a> :: <span class="keyword">forall</span> m n f f'. <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f' -&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n (f, f')</p></div><div class="top"><p class="src"><a name="v:pairBwd" class="def">pairBwd</a> :: <span class="keyword">forall</span> m n f f'. <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f' -&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n (f, f')</p></div><div class="top"><p class="src"><a name="v:pairLattice" class="def">pairLattice</a> :: <span class="keyword">forall</span> f f'.  <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f -&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> f' -&gt; <a href="Compiler-Hoopl.html#t:DataflowLattice">DataflowLattice</a> (f, f')</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:Fuel" class="def">Fuel</a> = <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></p></div><div class="top"><p class="src"><a name="v:infiniteFuel" class="def">infiniteFuel</a> :: <a href="Compiler-Hoopl.html#t:Fuel">Fuel</a></p></div><div class="top"><p class="src"><a name="v:fuelRemaining" class="def">fuelRemaining</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; m <a href="Compiler-Hoopl.html#t:Fuel">Fuel</a></p><div class="doc"><p>Find out how much fuel remains after a computation.
 Can be subtracted from initial fuel to get total consumption.
</p></div></div><div class="top"><p class="src"><a name="v:withFuel" class="def">withFuel</a> :: <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> m =&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -&gt; m (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a)</p></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a name="t:FuelMonad" class="def">FuelMonad</a> m  <span class="keyword">where</span></p><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:getFuel" class="def">getFuel</a> :: m <a href="Compiler-Hoopl.html#t:Fuel">Fuel</a></p><p class="src"><a name="v:setFuel" class="def">setFuel</a> :: <a href="Compiler-Hoopl.html#t:Fuel">Fuel</a> -&gt; m ()</p></div><div class="subs instances"><p id="control.i:FuelMonad" class="caption collapser" onclick="toggleSection('i:FuelMonad')">Instances</p><div id="section.i:FuelMonad" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> (<a href="Compiler-Hoopl.html#t:InfiniteFuelMonad">InfiniteFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> (<a href="Compiler-Hoopl.html#t:CheckingFuelMonad">CheckingFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">class</span>  <a name="t:FuelMonadT" class="def">FuelMonadT</a> fm  <span class="keyword">where</span></p><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:runWithFuel" class="def">runWithFuel</a> :: (<a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> (fm m)) =&gt; <a href="Compiler-Hoopl.html#t:Fuel">Fuel</a> -&gt; fm m a -&gt; m a</p><p class="src"><a name="v:liftFuel" class="def">liftFuel</a> :: (<a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m, <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> (fm m)) =&gt; m a -&gt; fm m a</p></div><div class="subs instances"><p id="control.i:FuelMonadT" class="caption collapser" onclick="toggleSection('i:FuelMonadT')">Instances</p><div id="section.i:FuelMonadT" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:FuelMonadT">FuelMonadT</a> <a href="Compiler-Hoopl.html#t:InfiniteFuelMonad">InfiniteFuelMonad</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:FuelMonadT">FuelMonadT</a> <a href="Compiler-Hoopl.html#t:CheckingFuelMonad">CheckingFuelMonad</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:CheckingFuelMonad" class="def">CheckingFuelMonad</a> m a </p><div class="subs instances"><p id="control.i:CheckingFuelMonad" class="caption collapser" onclick="toggleSection('i:CheckingFuelMonad')">Instances</p><div id="section.i:CheckingFuelMonad" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:FuelMonadT">FuelMonadT</a> <a href="Compiler-Hoopl.html#t:CheckingFuelMonad">CheckingFuelMonad</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> (<a href="Compiler-Hoopl.html#t:CheckingFuelMonad">CheckingFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m =&gt; <a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> (<a href="Compiler-Hoopl.html#t:CheckingFuelMonad">CheckingFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> m =&gt; <a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> (<a href="Compiler-Hoopl.html#t:CheckingFuelMonad">CheckingFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> (<a href="Compiler-Hoopl.html#t:CheckingFuelMonad">CheckingFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:InfiniteFuelMonad" class="def">InfiniteFuelMonad</a> m a </p><div class="subs instances"><p id="control.i:InfiniteFuelMonad" class="caption collapser" onclick="toggleSection('i:InfiniteFuelMonad')">Instances</p><div id="section.i:InfiniteFuelMonad" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:FuelMonadT">FuelMonadT</a> <a href="Compiler-Hoopl.html#t:InfiniteFuelMonad">InfiniteFuelMonad</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> (<a href="Compiler-Hoopl.html#t:InfiniteFuelMonad">InfiniteFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> m =&gt; <a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> (<a href="Compiler-Hoopl.html#t:InfiniteFuelMonad">InfiniteFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> m =&gt; <a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> (<a href="Compiler-Hoopl.html#t:InfiniteFuelMonad">InfiniteFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:FuelMonad">FuelMonad</a> (<a href="Compiler-Hoopl.html#t:InfiniteFuelMonad">InfiniteFuelMonad</a> m)</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:SimpleFuelMonad" class="def">SimpleFuelMonad</a> = <a href="Compiler-Hoopl.html#t:CheckingFuelMonad">CheckingFuelMonad</a> <a href="Compiler-Hoopl.html#t:SimpleUniqueMonad">SimpleUniqueMonad</a></p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Unique" class="def">Unique</a>  </p><div class="subs instances"><p id="control.i:Unique" class="caption collapser" onclick="toggleSection('i:Unique')">Instances</p><div id="section.i:Unique" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Compiler-Hoopl.html#t:Unique">Unique</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="Compiler-Hoopl.html#t:Unique">Unique</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> <a href="Compiler-Hoopl.html#t:Unique">Unique</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">Uniques <a href="Compiler-Hoopl.html#t:Unique">Unique</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:intToUnique" class="def">intToUnique</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="Compiler-Hoopl.html#t:Unique">Unique</a></p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:UniqueSet" class="def">UniqueSet</a>  </p><div class="subs instances"><p id="control.i:UniqueSet" class="caption collapser" onclick="toggleSection('i:UniqueSet')">Instances</p><div id="section.i:UniqueSet" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="Compiler-Hoopl.html#t:UniqueSet">UniqueSet</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="Compiler-Hoopl.html#t:UniqueSet">UniqueSet</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> <a href="Compiler-Hoopl.html#t:UniqueSet">UniqueSet</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:IsSet">IsSet</a> <a href="Compiler-Hoopl.html#t:UniqueSet">UniqueSet</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:UniqueMap" class="def">UniqueMap</a> v </p><div class="subs instances"><p id="control.i:UniqueMap" class="caption collapser" onclick="toggleSection('i:UniqueMap')">Instances</p><div id="section.i:UniqueMap" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:IsMap">IsMap</a> <a href="Compiler-Hoopl.html#t:UniqueMap">UniqueMap</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> v =&gt; <a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> (<a href="Compiler-Hoopl.html#t:UniqueMap">UniqueMap</a> v)</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> v =&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> (<a href="Compiler-Hoopl.html#t:UniqueMap">UniqueMap</a> v)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> v =&gt; <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> (<a href="Compiler-Hoopl.html#t:UniqueMap">UniqueMap</a> v)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">class</span> <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a name="t:UniqueMonad" class="def">UniqueMonad</a> m  <span class="keyword">where</span></p><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:freshUnique" class="def">freshUnique</a> :: m <a href="Compiler-Hoopl.html#t:Unique">Unique</a></p></div><div class="subs instances"><p id="control.i:UniqueMonad" class="caption collapser" onclick="toggleSection('i:UniqueMonad')">Instances</p><div id="section.i:UniqueMonad" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> <a href="Compiler-Hoopl.html#t:SimpleUniqueMonad">SimpleUniqueMonad</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> (<a href="Compiler-Hoopl.html#t:UniqueMonadT">UniqueMonadT</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> m =&gt; <a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> (<a href="Compiler-Hoopl.html#t:InfiniteFuelMonad">InfiniteFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> m =&gt; <a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> (<a href="Compiler-Hoopl.html#t:CheckingFuelMonad">CheckingFuelMonad</a> m)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:SimpleUniqueMonad" class="def">SimpleUniqueMonad</a> a </p><div class="subs instances"><p id="control.i:SimpleUniqueMonad" class="caption collapser" onclick="toggleSection('i:SimpleUniqueMonad')">Instances</p><div id="section.i:SimpleUniqueMonad" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> <a href="Compiler-Hoopl.html#t:SimpleUniqueMonad">SimpleUniqueMonad</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:CheckpointMonad">CheckpointMonad</a> <a href="Compiler-Hoopl.html#t:SimpleUniqueMonad">SimpleUniqueMonad</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> <a href="Compiler-Hoopl.html#t:SimpleUniqueMonad">SimpleUniqueMonad</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:runSimpleUniqueMonad" class="def">runSimpleUniqueMonad</a> ::  <a href="Compiler-Hoopl.html#t:SimpleUniqueMonad">SimpleUniqueMonad</a> a -&gt; a</p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:UniqueMonadT" class="def">UniqueMonadT</a> m a </p><div class="subs instances"><p id="control.i:UniqueMonadT" class="caption collapser" onclick="toggleSection('i:UniqueMonadT')">Instances</p><div id="section.i:UniqueMonadT" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> (<a href="Compiler-Hoopl.html#t:UniqueMonadT">UniqueMonadT</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:UniqueMonad">UniqueMonad</a> (<a href="Compiler-Hoopl.html#t:UniqueMonadT">UniqueMonadT</a> m)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:runUniqueMonadT" class="def">runUniqueMonadT</a> :: <a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> m =&gt; <a href="Compiler-Hoopl.html#t:UniqueMonadT">UniqueMonadT</a> m a -&gt; m a</p></div><div class="top"><p class="src"><a name="v:uniqueToInt" class="def">uniqueToInt</a> :: <a href="Compiler-Hoopl.html#t:Unique">Unique</a> -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></p></div><div class="top"><p class="src"><a name="v:gUnitOO" class="def">gUnitOO</a> ::  block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a></p></div><div class="top"><p class="src"><a name="v:gUnitOC" class="def">gUnitOC</a> ::  block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a></p></div><div class="top"><p class="src"><a name="v:gUnitCO" class="def">gUnitCO</a> ::  block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a></p></div><div class="top"><p class="src"><a name="v:gUnitCC" class="def">gUnitCC</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (block n) =&gt; block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a></p></div><div class="top"><p class="src"><a name="v:catGraphNodeOC" class="def">catGraphNodeOC</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e <a href="Compiler-Hoopl.html#t:C">C</a></p></div><div class="top"><p class="src"><a name="v:catGraphNodeOO" class="def">catGraphNodeOO</a> ::  <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e <a href="Compiler-Hoopl.html#t:O">O</a></p></div><div class="top"><p class="src"><a name="v:catNodeCOGraph" class="def">catNodeCOGraph</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:C">C</a> x</p></div><div class="top"><p class="src"><a name="v:catNodeOOGraph" class="def">catNodeOOGraph</a> ::  n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n <a href="Compiler-Hoopl.html#t:O">O</a> x</p></div><div class="top"><p class="src"><a name="v:graphMapBlocks" class="def">graphMapBlocks</a> :: <span class="keyword">forall</span> block n block' n' e x.  (<span class="keyword">forall</span> e x.  block n e x -&gt; block' n' e x) -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n e x -&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block' n' e x</p><div class="doc"><p>Function <code><a href="Compiler-Hoopl.html#v:graphMapBlocks">graphMapBlocks</a></code> enables a change of representation of blocks,
 nodes, or both.  It lifts a polymorphic block transform into a polymorphic
 graph transform.  When the block representation stabilizes, a similar
 function should be provided for blocks.
</p></div></div><div class="top"><p class="src"><a name="v:blockMapNodes" class="def">blockMapNodes</a> ::  (<span class="keyword">forall</span> e x.  n e x -&gt; n' e x) -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n' e x</p></div><div class="top"><p class="src"><a name="v:blockMapNodes3" class="def">blockMapNodes3</a> ::  (n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; n' <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:O">O</a>, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a> -&gt; n' <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:O">O</a>, n <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a> -&gt; n' <a href="Compiler-Hoopl.html#t:O">O</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n' e x</p><div class="doc"><p>Function <code><a href="Compiler-Hoopl.html#v:blockMapNodes">blockMapNodes</a></code> enables a change of nodes in a block.
</p></div></div><div class="top"><p class="src"><a name="v:blockGraph" class="def">blockGraph</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:Block">Block</a> n e x -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x</p></div><div class="top"><p class="src"><a name="v:postorder_dfs" class="def">postorder_dfs</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (block n) =&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; [block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>]</p><div class="doc"><p>Traversal: <code><a href="Compiler-Hoopl.html#v:postorder_dfs">postorder_dfs</a></code> returns a list of blocks reachable
 from the entry of enterable graph. The entry and exit are *not* included.
 The list has the following property:
</p><p>Say a <a href="back reference.html">back reference</a> exists if one of a block's
	control-flow successors precedes it in the output list
</p><p>Then there are as few back references as possible
</p><p>The output is suitable for use in
 a forward dataflow problem.  For a backward problem, simply reverse
 the list.  (<code><a href="Compiler-Hoopl.html#v:postorder_dfs">postorder_dfs</a></code> is sufficiently tricky to implement that
 one doesn't want to try and maintain both forward and backward
 versions.)
</p></div></div><div class="top"><p class="src"><a name="v:postorder_dfs_from" class="def">postorder_dfs_from</a> :: (<a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> block, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> b) =&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (block <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; b -&gt; [block <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>]</p></div><div class="top"><p class="src"><a name="v:postorder_dfs_from_except" class="def">postorder_dfs_from_except</a> :: <span class="keyword">forall</span> block e. (<a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> block, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> e) =&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (block <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; e -&gt; <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a> -&gt; [block <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>]</p></div><div class="top"><p class="src"><a name="v:preorder_dfs" class="def">preorder_dfs</a> :: <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (block n) =&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n <a href="Compiler-Hoopl.html#t:O">O</a> x -&gt; [block n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>]</p></div><div class="top"><p class="src"><a name="v:preorder_dfs_from_except" class="def">preorder_dfs_from_except</a> :: <span class="keyword">forall</span> block e. (<a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> block, <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> e) =&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (block <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; e -&gt; <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a> -&gt; [block <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>]</p></div><div class="top"><p class="src"><a name="v:labelsDefined" class="def">labelsDefined</a> :: <span class="keyword">forall</span> block n e x. <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (block n) =&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n e x -&gt; <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a></p></div><div class="top"><p class="src"><a name="v:labelsUsed" class="def">labelsUsed</a> :: <span class="keyword">forall</span> block n e x. <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> (block n) =&gt; <a href="Compiler-Hoopl.html#t:Graph-39-">Graph'</a> block n e x -&gt; <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a></p></div><div class="top"><p class="src"><a name="v:externalEntryLabels" class="def">externalEntryLabels</a> :: <span class="keyword">forall</span> n. <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:LabelMap">LabelMap</a> (<a href="Compiler-Hoopl.html#t:Block">Block</a> n <a href="Compiler-Hoopl.html#t:C">C</a> <a href="Compiler-Hoopl.html#t:C">C</a>) -&gt; <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a></p></div><div class="top"><p class="src"><span class="keyword">class</span>  <a name="t:LabelsPtr" class="def">LabelsPtr</a> l  <span class="keyword">where</span></p><div class="subs methods"><p class="caption">Methods</p><p class="src"><a name="v:targetLabels" class="def">targetLabels</a> :: l -&gt; [<a href="Compiler-Hoopl.html#t:Label">Label</a>]</p></div><div class="subs instances"><p id="control.i:LabelsPtr" class="caption collapser" onclick="toggleSection('i:LabelsPtr')">Instances</p><div id="section.i:LabelsPtr" class="show"><table><tr><td class="src"><a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> <a href="Compiler-Hoopl.html#t:LabelSet">LabelSet</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> <a href="Compiler-Hoopl.html#t:Label">Label</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> l =&gt; <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> [l]</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; <a href="Compiler-Hoopl.html#t:LabelsPtr">LabelsPtr</a> (n e <a href="Compiler-Hoopl.html#t:C">C</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:TraceFn" class="def">TraceFn</a> = <span class="keyword">forall</span> a.  <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; a -&gt; a</p></div><div class="top"><p class="src"><a name="v:debugFwdJoins" class="def">debugFwdJoins</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> f =&gt; <a href="Compiler-Hoopl.html#t:TraceFn">TraceFn</a> -&gt; ChangePred -&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f</p><div class="doc"><p>Debugging combinators:
 Each combinator takes a dataflow pass and produces
 a dataflow pass that can output debugging messages.
 You provide the function, we call it with the applicable message.
</p><p>The most common use case is probably to:
</p><ol><li> import <code><a href="Debug.html#t:Trace">Trace</a></code>
</li><li> pass <code>trace</code> as the 1st argument to the debug combinator
</li><li> pass 'const true' as the 2nd argument to the debug combinator
</li></ol><p>There are two kinds of debugging messages for a join,
 depending on whether the join is higher in the lattice than the old fact:
   1. If the join is higher, we show:
         + Join<code>L: f1 <code>join</code> f2 = f'
      where:
        + indicates a change
        L is the label where the join takes place
        f1 is the old fact at the label
        f2 is the new fact we are joining to f1
        f' is the result of the join
   2. _ Join</code>L: f2 &lt;= f1
      where:
        _ indicates no change
        L is the label where the join takes place
        f1 is the old fact at the label (which remains unchanged)
        f2 is the new fact we joined with f1
</p></div></div><div class="top"><p class="src"><a name="v:debugBwdJoins" class="def">debugBwdJoins</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> f =&gt; <a href="Compiler-Hoopl.html#t:TraceFn">TraceFn</a> -&gt; ChangePred -&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f</p></div><div class="top"><p class="src"><a name="v:debugFwdTransfers" class="def">debugFwdTransfers</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> f =&gt; <a href="Compiler-Hoopl.html#t:TraceFn">TraceFn</a> -&gt; ShowN n -&gt; FPred n f -&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:FwdPass">FwdPass</a> m n f</p></div><div class="top"><p class="src"><a name="v:debugBwdTransfers" class="def">debugBwdTransfers</a> :: <span class="keyword">forall</span> m n f. <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> f =&gt; <a href="Compiler-Hoopl.html#t:TraceFn">TraceFn</a> -&gt; ShowN n -&gt; BPred n f -&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f -&gt; <a href="Compiler-Hoopl.html#t:BwdPass">BwdPass</a> m n f</p></div><div class="top"><p class="src"><a name="v:showGraph" class="def">showGraph</a> :: <span class="keyword">forall</span> n e x. <a href="Compiler-Hoopl.html#t:NonLocal">NonLocal</a> n =&gt; Showing n -&gt; <a href="Compiler-Hoopl.html#t:Graph">Graph</a> n e x -&gt; <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></p></div><div class="top"><p class="src"><a name="v:showFactBase" class="def">showFactBase</a> :: <a href="../base-4.5.1.0/Text-Show.html#t:Show">Show</a> f =&gt; <a href="Compiler-Hoopl.html#t:FactBase">FactBase</a> f -&gt; <a href="../base-4.5.1.0/Data-String.html#t:String">String</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>