Sophie

Sophie

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

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>CoreSyn</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_CoreSyn.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ghc-7.4.2: The GHC API</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">CoreSyn</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Main data types
</a><ul><li><a href="#g:2"><code><a href="CoreSyn.html#t:Expr">Expr</a></code> construction
</a></li><li><a href="#g:3">Simple <code><a href="CoreSyn.html#t:Expr">Expr</a></code> access functions and predicates
</a></li></ul></li><li><a href="#g:4">Unfolding data types
</a><ul><li><a href="#g:5">Constructing <code><a href="CoreSyn.html#t:Unfolding">Unfolding</a></code>s
</a></li><li><a href="#g:6">Predicates and deconstruction on <code><a href="CoreSyn.html#t:Unfolding">Unfolding</a></code>
</a></li></ul></li><li><a href="#g:7">Strictness
</a></li><li><a href="#g:8">Annotated expression data types
</a><ul><li><a href="#g:9">Operations on annotated expressions
</a></li><li><a href="#g:10">Operations on annotations
</a></li></ul></li><li><a href="#g:11">Core rule data types
</a><ul><li><a href="#g:12">Operations on <code><a href="CoreSyn.html#t:CoreRule">CoreRule</a></code>s 
</a></li></ul></li><li><a href="#g:13">Core vectorisation declarations data type
</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>CoreSyn holds all the main data types for use by for the Glasgow Haskell Compiler midsection
</p></div></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:Expr">Expr</a> b<ul class="subs"><li>= <a href="#v:Var">Var</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:Lit">Lit</a> <a href="Literal.html#t:Literal">Literal</a>  </li><li>| <a href="#v:App">App</a> (<a href="CoreSyn.html#t:Expr">Expr</a> b) (<a href="CoreSyn.html#t:Arg">Arg</a> b)  </li><li>| <a href="#v:Lam">Lam</a> b (<a href="CoreSyn.html#t:Expr">Expr</a> b)  </li><li>| <a href="#v:Let">Let</a> (<a href="CoreSyn.html#t:Bind">Bind</a> b) (<a href="CoreSyn.html#t:Expr">Expr</a> b)  </li><li>| <a href="#v:Case">Case</a> (<a href="CoreSyn.html#t:Expr">Expr</a> b) b <a href="Type.html#t:Type">Type</a> [<a href="CoreSyn.html#t:Alt">Alt</a> b]  </li><li>| <a href="#v:Cast">Cast</a> (<a href="CoreSyn.html#t:Expr">Expr</a> b) <a href="Coercion.html#t:Coercion">Coercion</a>  </li><li>| <a href="#v:Tick">Tick</a> (<a href="CoreSyn.html#t:Tickish">Tickish</a> <a href="Var.html#t:Id">Id</a>) (<a href="CoreSyn.html#t:Expr">Expr</a> b)  </li><li>| <a href="#v:Type">Type</a> <a href="Type.html#t:Type">Type</a>  </li><li>| <a href="#v:Coercion">Coercion</a> <a href="Coercion.html#t:Coercion">Coercion</a>  </li></ul></li><li class="src short"><span class="keyword">type</span> <a href="#t:Alt">Alt</a> b = (<a href="CoreSyn.html#t:AltCon">AltCon</a>, [b], <a href="CoreSyn.html#t:Expr">Expr</a> b)</li><li class="src short"><span class="keyword">data</span>  <a href="#t:Bind">Bind</a> b<ul class="subs"><li>= <a href="#v:NonRec">NonRec</a> b (<a href="CoreSyn.html#t:Expr">Expr</a> b)  </li><li>| <a href="#v:Rec">Rec</a> [(b, <a href="CoreSyn.html#t:Expr">Expr</a> b)]  </li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:AltCon">AltCon</a> <ul class="subs"><li>= <a href="#v:DataAlt">DataAlt</a> <a href="DataCon.html#t:DataCon">DataCon</a>  </li><li>| <a href="#v:LitAlt">LitAlt</a> <a href="Literal.html#t:Literal">Literal</a>  </li><li>| <a href="#v:DEFAULT">DEFAULT</a>  </li></ul></li><li class="src short"><span class="keyword">type</span> <a href="#t:Arg">Arg</a> b = <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><span class="keyword">data</span>  <a href="#t:Tickish">Tickish</a> id<ul class="subs"><li>= <a href="#v:ProfNote">ProfNote</a> { <ul class="subs"><li><a href="#v:profNoteCC">profNoteCC</a> :: <a href="CostCentre.html#t:CostCentre">CostCentre</a></li><li><a href="#v:profNoteCount">profNoteCount</a> :: !<a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:profNoteScope">profNoteScope</a> :: !<a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li></ul> }</li><li>| <a href="#v:HpcTick">HpcTick</a> { <ul class="subs"><li><a href="#v:tickModule">tickModule</a> :: <a href="Module.html#t:Module">Module</a></li><li><a href="#v:tickId">tickId</a> :: !<a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li></ul> }</li><li>| <a href="#v:Breakpoint">Breakpoint</a> { <ul class="subs"><li><a href="#v:breakpointId">breakpointId</a> :: !<a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li><a href="#v:breakpointFVs">breakpointFVs</a> :: [id]</li></ul> }</li></ul></li><li class="src short"><span class="keyword">type</span> <a href="#t:CoreProgram">CoreProgram</a> = [<a href="CoreSyn.html#t:CoreBind">CoreBind</a>]</li><li class="src short"><span class="keyword">type</span> <a href="#t:CoreExpr">CoreExpr</a> = <a href="CoreSyn.html#t:Expr">Expr</a> <a href="CoreSyn.html#t:CoreBndr">CoreBndr</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:CoreAlt">CoreAlt</a> = <a href="CoreSyn.html#t:Alt">Alt</a> <a href="CoreSyn.html#t:CoreBndr">CoreBndr</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:CoreBind">CoreBind</a> = <a href="CoreSyn.html#t:Bind">Bind</a> <a href="CoreSyn.html#t:CoreBndr">CoreBndr</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:CoreArg">CoreArg</a> = <a href="CoreSyn.html#t:Arg">Arg</a> <a href="CoreSyn.html#t:CoreBndr">CoreBndr</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:CoreBndr">CoreBndr</a> = <a href="Var.html#t:Var">Var</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:TaggedExpr">TaggedExpr</a> t = <a href="CoreSyn.html#t:Expr">Expr</a> (<a href="CoreSyn.html#t:TaggedBndr">TaggedBndr</a> t)</li><li class="src short"><span class="keyword">type</span> <a href="#t:TaggedAlt">TaggedAlt</a> t = <a href="CoreSyn.html#t:Alt">Alt</a> (<a href="CoreSyn.html#t:TaggedBndr">TaggedBndr</a> t)</li><li class="src short"><span class="keyword">type</span> <a href="#t:TaggedBind">TaggedBind</a> t = <a href="CoreSyn.html#t:Bind">Bind</a> (<a href="CoreSyn.html#t:TaggedBndr">TaggedBndr</a> t)</li><li class="src short"><span class="keyword">type</span> <a href="#t:TaggedArg">TaggedArg</a> t = <a href="CoreSyn.html#t:Arg">Arg</a> (<a href="CoreSyn.html#t:TaggedBndr">TaggedBndr</a> t)</li><li class="src short"><span class="keyword">data</span>  <a href="#t:TaggedBndr">TaggedBndr</a> t = <a href="#v:TB">TB</a> <a href="CoreSyn.html#t:CoreBndr">CoreBndr</a> t</li><li class="src short"><a href="#v:mkLets">mkLets</a> ::  [<a href="CoreSyn.html#t:Bind">Bind</a> b] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkLams">mkLams</a> ::  [b] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkApps">mkApps</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; [<a href="CoreSyn.html#t:Arg">Arg</a> b] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkTyApps">mkTyApps</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; [<a href="Type.html#t:Type">Type</a>] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkCoApps">mkCoApps</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; [<a href="Coercion.html#t:Coercion">Coercion</a>] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkVarApps">mkVarApps</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; [<a href="Var.html#t:Var">Var</a>] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkIntLit">mkIntLit</a> ::  <a href="../base-4.5.1.0/Prelude.html#t:Integer">Integer</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkIntLitInt">mkIntLitInt</a> ::  <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkWordLit">mkWordLit</a> ::  <a href="../base-4.5.1.0/Prelude.html#t:Integer">Integer</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkWordLitWord">mkWordLitWord</a> ::  <a href="../base-4.5.1.0/Data-Word.html#t:Word">Word</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkWord64LitWord64">mkWord64LitWord64</a> ::  <a href="../base-4.5.1.0/Data-Word.html#t:Word64">Word64</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkInt64LitInt64">mkInt64LitInt64</a> ::  <a href="../base-4.5.1.0/Data-Int.html#t:Int64">Int64</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkCharLit">mkCharLit</a> ::  <a href="../base-4.5.1.0/Data-Char.html#t:Char">Char</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkStringLit">mkStringLit</a> ::  <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkFloatLit">mkFloatLit</a> ::  <a href="../base-4.5.1.0/Prelude.html#t:Rational">Rational</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkFloatLitFloat">mkFloatLitFloat</a> ::  <a href="../base-4.5.1.0/Prelude.html#t:Float">Float</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkDoubleLit">mkDoubleLit</a> ::  <a href="../base-4.5.1.0/Prelude.html#t:Rational">Rational</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkDoubleLitDouble">mkDoubleLitDouble</a> ::  <a href="../base-4.5.1.0/Prelude.html#t:Double">Double</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkConApp">mkConApp</a> ::  <a href="DataCon.html#t:DataCon">DataCon</a> -&gt; [<a href="CoreSyn.html#t:Arg">Arg</a> b] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:mkTyBind">mkTyBind</a> :: <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="Type.html#t:Type">Type</a> -&gt; <a href="CoreSyn.html#t:CoreBind">CoreBind</a></li><li class="src short"><a href="#v:mkCoBind">mkCoBind</a> :: <a href="Var.html#t:CoVar">CoVar</a> -&gt; <a href="Coercion.html#t:Coercion">Coercion</a> -&gt; <a href="CoreSyn.html#t:CoreBind">CoreBind</a></li><li class="src short"><a href="#v:varToCoreExpr">varToCoreExpr</a> ::  <a href="CoreSyn.html#t:CoreBndr">CoreBndr</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</li><li class="src short"><a href="#v:varsToCoreExprs">varsToCoreExprs</a> ::  [<a href="CoreSyn.html#t:CoreBndr">CoreBndr</a>] -&gt; [<a href="CoreSyn.html#t:Expr">Expr</a> b]</li><li class="src short"><a href="#v:isId">isId</a> :: <a href="Var.html#t:Var">Var</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:cmpAltCon">cmpAltCon</a> :: <a href="CoreSyn.html#t:AltCon">AltCon</a> -&gt; <a href="CoreSyn.html#t:AltCon">AltCon</a> -&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></li><li class="src short"><a href="#v:cmpAlt">cmpAlt</a> ::  <a href="CoreSyn.html#t:Alt">Alt</a> b -&gt; <a href="CoreSyn.html#t:Alt">Alt</a> b -&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></li><li class="src short"><a href="#v:ltAlt">ltAlt</a> ::  <a href="CoreSyn.html#t:Alt">Alt</a> b -&gt; <a href="CoreSyn.html#t:Alt">Alt</a> b -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:bindersOf">bindersOf</a> ::  <a href="CoreSyn.html#t:Bind">Bind</a> b -&gt; [b]</li><li class="src short"><a href="#v:bindersOfBinds">bindersOfBinds</a> ::  [<a href="CoreSyn.html#t:Bind">Bind</a> b] -&gt; [b]</li><li class="src short"><a href="#v:rhssOfBind">rhssOfBind</a> ::  <a href="CoreSyn.html#t:Bind">Bind</a> b -&gt; [<a href="CoreSyn.html#t:Expr">Expr</a> b]</li><li class="src short"><a href="#v:rhssOfAlts">rhssOfAlts</a> ::  [<a href="CoreSyn.html#t:Alt">Alt</a> b] -&gt; [<a href="CoreSyn.html#t:Expr">Expr</a> b]</li><li class="src short"><a href="#v:collectBinders">collectBinders</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; ([b], <a href="CoreSyn.html#t:Expr">Expr</a> b)</li><li class="src short"><a href="#v:collectTyBinders">collectTyBinders</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; ([<a href="Var.html#t:TyVar">TyVar</a>], <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>)</li><li class="src short"><a href="#v:collectValBinders">collectValBinders</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; ([<a href="Var.html#t:Id">Id</a>], <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>)</li><li class="src short"><a href="#v:collectTyAndValBinders">collectTyAndValBinders</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; ([<a href="Var.html#t:TyVar">TyVar</a>], [<a href="Var.html#t:Id">Id</a>], <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>)</li><li class="src short"><a href="#v:collectArgs">collectArgs</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; (<a href="CoreSyn.html#t:Expr">Expr</a> b, [<a href="CoreSyn.html#t:Arg">Arg</a> b])</li><li class="src short"><a href="#v:flattenBinds">flattenBinds</a> ::  [<a href="CoreSyn.html#t:Bind">Bind</a> b] -&gt; [(b, <a href="CoreSyn.html#t:Expr">Expr</a> b)]</li><li class="src short"><a href="#v:isValArg">isValArg</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isTypeArg">isTypeArg</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isTyCoArg">isTyCoArg</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:valArgCount">valArgCount</a> ::  [<a href="CoreSyn.html#t:Arg">Arg</a> b] -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li class="src short"><a href="#v:valBndrCount">valBndrCount</a> :: [<a href="CoreSyn.html#t:CoreBndr">CoreBndr</a>] -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li class="src short"><a href="#v:isRuntimeArg">isRuntimeArg</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isRuntimeVar">isRuntimeVar</a> :: <a href="Var.html#t:Var">Var</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:tickishCounts">tickishCounts</a> ::  <a href="CoreSyn.html#t:Tickish">Tickish</a> id -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:tickishScoped">tickishScoped</a> ::  <a href="CoreSyn.html#t:Tickish">Tickish</a> id -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:tickishIsCode">tickishIsCode</a> ::  <a href="CoreSyn.html#t:Tickish">Tickish</a> id -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:mkNoTick">mkNoTick</a> ::  <a href="CoreSyn.html#t:Tickish">Tickish</a> id -&gt; <a href="CoreSyn.html#t:Tickish">Tickish</a> id</li><li class="src short"><a href="#v:mkNoScope">mkNoScope</a> ::  <a href="CoreSyn.html#t:Tickish">Tickish</a> id -&gt; <a href="CoreSyn.html#t:Tickish">Tickish</a> id</li><li class="src short"><a href="#v:tickishCanSplit">tickishCanSplit</a> :: <a href="CoreSyn.html#t:Tickish">Tickish</a> <a href="Var.html#t:Id">Id</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:Unfolding">Unfolding</a> <ul class="subs"><li>= <a href="#v:NoUnfolding">NoUnfolding</a>  </li><li>| <a href="#v:OtherCon">OtherCon</a> [<a href="CoreSyn.html#t:AltCon">AltCon</a>]  </li><li>| <a href="#v:DFunUnfolding">DFunUnfolding</a> <a href="BasicTypes.html#t:Arity">Arity</a> <a href="DataCon.html#t:DataCon">DataCon</a> [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>]  </li><li>| <a href="#v:CoreUnfolding">CoreUnfolding</a> { <ul class="subs"><li><a href="#v:uf_tmpl">uf_tmpl</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li><a href="#v:uf_src">uf_src</a> :: <a href="CoreSyn.html#t:UnfoldingSource">UnfoldingSource</a></li><li><a href="#v:uf_is_top">uf_is_top</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:uf_arity">uf_arity</a> :: <a href="BasicTypes.html#t:Arity">Arity</a></li><li><a href="#v:uf_is_value">uf_is_value</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:uf_is_conlike">uf_is_conlike</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:uf_is_cheap">uf_is_cheap</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:uf_expandable">uf_expandable</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:uf_guidance">uf_guidance</a> :: <a href="CoreSyn.html#t:UnfoldingGuidance">UnfoldingGuidance</a></li></ul> }</li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:UnfoldingGuidance">UnfoldingGuidance</a> <ul class="subs"><li>= <a href="#v:UnfWhen">UnfWhen</a> { <ul class="subs"><li><a href="#v:ug_unsat_ok">ug_unsat_ok</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:ug_boring_ok">ug_boring_ok</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li></ul> }</li><li>| <a href="#v:UnfIfGoodArgs">UnfIfGoodArgs</a> { <ul class="subs"><li><a href="#v:ug_args">ug_args</a> :: [<a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a>]</li><li><a href="#v:ug_size">ug_size</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li><a href="#v:ug_res">ug_res</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li></ul> }</li><li>| <a href="#v:UnfNever">UnfNever</a>  </li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:UnfoldingSource">UnfoldingSource</a> <ul class="subs"><li>= <a href="#v:InlineRhs">InlineRhs</a>  </li><li>| <a href="#v:InlineStable">InlineStable</a>  </li><li>| <a href="#v:InlineCompulsory">InlineCompulsory</a>  </li><li>| <a href="#v:InlineWrapper">InlineWrapper</a> <a href="Var.html#t:Id">Id</a>  </li></ul></li><li class="src short"><a href="#v:noUnfolding">noUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a></li><li class="src short"><a href="#v:evaldUnfolding">evaldUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a></li><li class="src short"><a href="#v:mkOtherCon">mkOtherCon</a> :: [<a href="CoreSyn.html#t:AltCon">AltCon</a>] -&gt; <a href="CoreSyn.html#t:Unfolding">Unfolding</a></li><li class="src short"><a href="#v:unSaturatedOk">unSaturatedOk</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:needSaturated">needSaturated</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:boringCxtOk">boringCxtOk</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:boringCxtNotOk">boringCxtNotOk</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:unfoldingTemplate">unfoldingTemplate</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:setUnfoldingTemplate">setUnfoldingTemplate</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:Unfolding">Unfolding</a></li><li class="src short"><a href="#v:expandUnfolding_maybe">expandUnfolding_maybe</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:maybeUnfoldingTemplate">maybeUnfoldingTemplate</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:otherCons">otherCons</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; [<a href="CoreSyn.html#t:AltCon">AltCon</a>]</li><li class="src short"><a href="#v:unfoldingArity">unfoldingArity</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="BasicTypes.html#t:Arity">Arity</a></li><li class="src short"><a href="#v:isValueUnfolding">isValueUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isEvaldUnfolding">isEvaldUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isCheapUnfolding">isCheapUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isExpandableUnfolding">isExpandableUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isConLikeUnfolding">isConLikeUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isCompulsoryUnfolding">isCompulsoryUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isStableUnfolding">isStableUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isStableCoreUnfolding_maybe">isStableCoreUnfolding_maybe</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="CoreSyn.html#t:UnfoldingSource">UnfoldingSource</a></li><li class="src short"><a href="#v:isClosedUnfolding">isClosedUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:hasSomeUnfolding">hasSomeUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:canUnfold">canUnfold</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:neverUnfoldGuidance">neverUnfoldGuidance</a> :: <a href="CoreSyn.html#t:UnfoldingGuidance">UnfoldingGuidance</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isStableSource">isStableSource</a> :: <a href="CoreSyn.html#t:UnfoldingSource">UnfoldingSource</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:seqExpr">seqExpr</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; ()</li><li class="src short"><a href="#v:seqExprs">seqExprs</a> :: [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; ()</li><li class="src short"><a href="#v:seqUnfolding">seqUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; ()</li><li class="src short"><span class="keyword">type</span> <a href="#t:AnnExpr">AnnExpr</a> bndr annot = (annot, <a href="CoreSyn.html#t:AnnExpr-39-">AnnExpr'</a> bndr annot)</li><li class="src short"><span class="keyword">data</span>  <a href="#t:AnnExpr-39-">AnnExpr'</a> bndr annot<ul class="subs"><li>= <a href="#v:AnnVar">AnnVar</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:AnnLit">AnnLit</a> <a href="Literal.html#t:Literal">Literal</a>  </li><li>| <a href="#v:AnnLam">AnnLam</a> bndr (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)  </li><li>| <a href="#v:AnnApp">AnnApp</a> (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot) (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)  </li><li>| <a href="#v:AnnCase">AnnCase</a> (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot) bndr <a href="Type.html#t:Type">Type</a> [<a href="CoreSyn.html#t:AnnAlt">AnnAlt</a> bndr annot]  </li><li>| <a href="#v:AnnLet">AnnLet</a> (<a href="CoreSyn.html#t:AnnBind">AnnBind</a> bndr annot) (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)  </li><li>| <a href="#v:AnnCast">AnnCast</a> (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot) (annot, <a href="Coercion.html#t:Coercion">Coercion</a>)  </li><li>| <a href="#v:AnnTick">AnnTick</a> (<a href="CoreSyn.html#t:Tickish">Tickish</a> <a href="Var.html#t:Id">Id</a>) (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)  </li><li>| <a href="#v:AnnType">AnnType</a> <a href="Type.html#t:Type">Type</a>  </li><li>| <a href="#v:AnnCoercion">AnnCoercion</a> <a href="Coercion.html#t:Coercion">Coercion</a>  </li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:AnnBind">AnnBind</a> bndr annot<ul class="subs"><li>= <a href="#v:AnnNonRec">AnnNonRec</a> bndr (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)  </li><li>| <a href="#v:AnnRec">AnnRec</a> [(bndr, <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)]  </li></ul></li><li class="src short"><span class="keyword">type</span> <a href="#t:AnnAlt">AnnAlt</a> bndr annot = (<a href="CoreSyn.html#t:AltCon">AltCon</a>, [bndr], <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)</li><li class="src short"><a href="#v:collectAnnArgs">collectAnnArgs</a> ::  <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> b a -&gt; (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> b a, [<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> b a])</li><li class="src short"><a href="#v:deAnnotate">deAnnotate</a> ::  <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> bndr</li><li class="src short"><a href="#v:deAnnotate-39-">deAnnotate'</a> ::  <a href="CoreSyn.html#t:AnnExpr-39-">AnnExpr'</a> bndr annot -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> bndr</li><li class="src short"><a href="#v:deAnnAlt">deAnnAlt</a> ::  <a href="CoreSyn.html#t:AnnAlt">AnnAlt</a> bndr annot -&gt; <a href="CoreSyn.html#t:Alt">Alt</a> bndr</li><li class="src short"><a href="#v:collectAnnBndrs">collectAnnBndrs</a> ::  <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot -&gt; ([bndr], <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)</li><li class="src short"><span class="keyword">data</span>  <a href="#t:CoreRule">CoreRule</a> <ul class="subs"><li>= <a href="#v:Rule">Rule</a> { <ul class="subs"><li><a href="#v:ru_name">ru_name</a> :: <a href="CoreSyn.html#t:RuleName">RuleName</a></li><li><a href="#v:ru_act">ru_act</a> :: <a href="BasicTypes.html#t:Activation">Activation</a></li><li><a href="#v:ru_fn">ru_fn</a> :: <a href="Name.html#t:Name">Name</a></li><li><a href="#v:ru_rough">ru_rough</a> :: [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>]</li><li><a href="#v:ru_bndrs">ru_bndrs</a> :: [<a href="CoreSyn.html#t:CoreBndr">CoreBndr</a>]</li><li><a href="#v:ru_args">ru_args</a> :: [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>]</li><li><a href="#v:ru_rhs">ru_rhs</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li><a href="#v:ru_auto">ru_auto</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:ru_local">ru_local</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li></ul> }</li><li>| <a href="#v:BuiltinRule">BuiltinRule</a> { <ul class="subs"><li><a href="#v:ru_name">ru_name</a> :: <a href="CoreSyn.html#t:RuleName">RuleName</a></li><li><a href="#v:ru_fn">ru_fn</a> :: <a href="Name.html#t:Name">Name</a></li><li><a href="#v:ru_nargs">ru_nargs</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li><a href="#v:ru_try">ru_try</a> :: <a href="CoreSyn.html#t:IdUnfoldingFun">IdUnfoldingFun</a> -&gt; [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li></ul> }</li></ul></li><li class="src short"><span class="keyword">type</span> <a href="#t:RuleName">RuleName</a> = <a href="FastString.html#t:FastString">FastString</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:IdUnfoldingFun">IdUnfoldingFun</a> = <a href="Var.html#t:Id">Id</a> -&gt; <a href="CoreSyn.html#t:Unfolding">Unfolding</a></li><li class="src short"><a href="#v:seqRules">seqRules</a> :: [<a href="CoreSyn.html#t:CoreRule">CoreRule</a>] -&gt; ()</li><li class="src short"><a href="#v:ruleArity">ruleArity</a> :: <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li class="src short"><a href="#v:ruleName">ruleName</a> :: <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="CoreSyn.html#t:RuleName">RuleName</a></li><li class="src short"><a href="#v:ruleIdName">ruleIdName</a> :: <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="Name.html#t:Name">Name</a></li><li class="src short"><a href="#v:ruleActivation">ruleActivation</a> :: <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="BasicTypes.html#t:Activation">Activation</a></li><li class="src short"><a href="#v:setRuleIdName">setRuleIdName</a> :: <a href="Name.html#t:Name">Name</a> -&gt; <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="CoreSyn.html#t:CoreRule">CoreRule</a></li><li class="src short"><a href="#v:isBuiltinRule">isBuiltinRule</a> :: <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:isLocalRule">isLocalRule</a> :: <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:CoreVect">CoreVect</a> <ul class="subs"><li>= <a href="#v:Vect">Vect</a> <a href="Var.html#t:Id">Id</a> (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>)  </li><li>| <a href="#v:NoVect">NoVect</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:VectType">VectType</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="TyCon.html#t:TyCon">TyCon</a> (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="TyCon.html#t:TyCon">TyCon</a>)  </li><li>| <a href="#v:VectClass">VectClass</a> <a href="TyCon.html#t:TyCon">TyCon</a>  </li><li>| <a href="#v:VectInst">VectInst</a> <a href="Var.html#t:Id">Id</a>  </li></ul></li></ul></div><div id="interface"><h1 id="g:1">Main data types
</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Expr" class="def">Expr</a> b </p><div class="doc"><p>This is the data type that represents GHCs core intermediate language. Currently
 GHC uses System FC <a href="http://research.microsoft.com/~simonpj/papers/ext-f/">http://research.microsoft.com/~simonpj/papers/ext-f/</a> for this purpose,
 which is closely related to the simpler and better known System F <a href="http://en.wikipedia.org/wiki/System_F">http://en.wikipedia.org/wiki/System_F</a>.
</p><p>We get from Haskell source to this Core language in a number of stages:
</p><ol><li> The source code is parsed into an abstract syntax tree, which is represented
    by the data type <code><a href="HsExpr.html#t:HsExpr">HsExpr</a></code> with the names being <code><a href="RdrName.html#t:RdrNames">RdrNames</a></code>
</li><li> This syntax tree is <em>renamed</em>, which attaches a <code><a href="Unique.html#t:Unique">Unique</a></code> to every <code><a href="RdrName.html#t:RdrName">RdrName</a></code>
    (yielding a <code><a href="Name.html#t:Name">Name</a></code>) to disambiguate identifiers which are lexically identical. 
    For example, this program:
</li></ol><pre>
      f x = let f x = x + 1
            in f (x - 2)
</pre><p>Would be renamed by having <code>Unique</code>s attached so it looked something like this:
</p><pre>
      f_1 x_2 = let f_3 x_4 = x_4 + 1
                in f_3 (x_2 - 2)
</pre><ol><li> The resulting syntax tree undergoes type checking (which also deals with instantiating
    type class arguments) to yield a <code><a href="HsExpr.html#t:HsExpr">HsExpr</a></code> type that has <code><a href="Id.html#t:Id">Id</a></code> as it's names.
</li><li> Finally the syntax tree is <em>desugared</em> from the expressive <code><a href="HsExpr.html#t:HsExpr">HsExpr</a></code> type into
    this <code><a href="CoreSyn.html#t:Expr">Expr</a></code> type, which has far fewer constructors and hence is easier to perform
    optimization, analysis and code generation on.
</li></ol><p>The type parameter <code>b</code> is for the type of binders in the expression tree.
</p><p>The language consists of the following elements:
</p><ul><li>  Variables
</li><li>  Primitive literals
</li><li>  Applications: note that the argument may be a <code><a href="Type.html#t:Type">Type</a></code>.
</li></ul><p>See <a href="CoreSyn.html#let_app_invariant">CoreSyn</a> for another invariant
</p><ul><li>  Lambda abstraction
</li><li>  Recursive and non recursive <code>let</code>s. Operationally
    this corresponds to allocating a thunk for the things
    bound and then executing the sub-expression.
</li></ul><p><a name="top_level_invariant"></a>
    <a name="letrec_invariant"></a>
</p><p>The right hand sides of all top-level and recursive <code>let</code>s
    <em>must</em> be of lifted type (see <a href="Type.html#type_classification">Type</a> for
    the meaning of <em>lifted</em> vs. <em>unlifted</em>).
</p><p><a name="let_app_invariant"></a>
    The right hand side of of a non-recursive <code><a href="CoreSyn.html#v:Let">Let</a></code> 
    _and_ the argument of an <code><a href="CoreSyn.html#v:App">App</a></code>,
    <em>may</em> be of unlifted type, but only if the expression 
    is ok-for-speculation.  This means that the let can be floated 
    around without difficulty. For example, this is OK:
</p><pre> y::Int# = x +# 1#
</pre><p>But this is not, as it may affect termination if the 
    expression is floated out:
</p><pre> y::Int# = fac 4#
</pre><p>In this situation you should use <code>case</code> rather than a <code>let</code>. The function
    <code><a href="CoreUtils.html#v:needsCaseBinding">needsCaseBinding</a></code> can help you determine which to generate, or
    alternatively use <code><a href="MkCore.html#v:mkCoreLet">mkCoreLet</a></code> rather than this constructor directly,
    which will generate a <code>case</code> if necessary
</p><p><a name="type_let"></a>
    We allow a <em>non-recursive</em> let to bind a type variable, thus:
</p><pre> Let (NonRec tv (Type ty)) body
</pre><p>This can be very convenient for postponing type substitutions until
    the next run of the simplifier.
</p><p>At the moment, the rest of the compiler only deals with type-let
    in a Let expression, rather than at top level.  We may want to revist
    this choice.
</p><ul><li>  Case split. Operationally this corresponds to evaluating
    the scrutinee (expression examined) to weak head normal form
    and then examining at most one level of resulting constructor (i.e. you
    cannot do nested pattern matching directly with this).
</li></ul><p>The binder gets bound to the value of the scrutinee,
    and the <code><a href="Type.html#t:Type">Type</a></code> must be that of all the case alternatives
</p><p><a name="case_invariants"></a>
    This is one of the more complicated elements of the Core language, 
    and comes with a number of restrictions:
</p><ol><li> The list of alternatives is non-empty
</li><li> The <code><a href="CoreSyn.html#v:DEFAULT">DEFAULT</a></code> case alternative must be first in the list, 
       if it occurs at all.
</li><li> The remaining cases are in order of increasing 
         tag	(for <code>DataAlts</code>) or
         lit	(for <code>LitAlts</code>).
       This makes finding the relevant constructor easy, 
       and makes comparison easier too.
</li><li> The list of alternatives must be exhaustive. An <em>exhaustive</em> case 
       does not necessarily mention all constructors:
</li></ol><pre>
    	      data Foo = Red | Green | Blue
    	 ... case x of 
    	      Red   -&gt; True
    	      other -&gt; f (case x of 
    	                      Green -&gt; ...
    	                      Blue  -&gt; ... ) ...
</pre><p>The inner case does not need a <code>Red</code> alternative, because <code>x</code> 
    	 can't be <code>Red</code> at that program point.
</p><ul><li>  Cast an expression to a particular type. 
    This is used to implement <code>newtype</code>s (a <code>newtype</code> constructor or 
    destructor just becomes a <code><a href="CoreSyn.html#v:Cast">Cast</a></code> in Core) and GADTs.
</li><li>  Notes. These allow general information to be added to expressions
    in the syntax tree
</li><li>  A type: this should only show up at the top level of an Arg
</li><li>  A coercion
</li></ul></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Var" class="def">Var</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Lit" class="def">Lit</a> <a href="Literal.html#t:Literal">Literal</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:App" class="def">App</a> (<a href="CoreSyn.html#t:Expr">Expr</a> b) (<a href="CoreSyn.html#t:Arg">Arg</a> b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Lam" class="def">Lam</a> b (<a href="CoreSyn.html#t:Expr">Expr</a> b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Let" class="def">Let</a> (<a href="CoreSyn.html#t:Bind">Bind</a> b) (<a href="CoreSyn.html#t:Expr">Expr</a> b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Case" class="def">Case</a> (<a href="CoreSyn.html#t:Expr">Expr</a> b) b <a href="Type.html#t:Type">Type</a> [<a href="CoreSyn.html#t:Alt">Alt</a> b]</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Cast" class="def">Cast</a> (<a href="CoreSyn.html#t:Expr">Expr</a> b) <a href="Coercion.html#t:Coercion">Coercion</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Tick" class="def">Tick</a> (<a href="CoreSyn.html#t:Tickish">Tickish</a> <a href="Var.html#t:Id">Id</a>) (<a href="CoreSyn.html#t:Expr">Expr</a> b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Type" class="def">Type</a> <a href="Type.html#t:Type">Type</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Coercion" class="def">Coercion</a> <a href="Coercion.html#t:Coercion">Coercion</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:Expr" class="caption collapser" onclick="toggleSection('i:Expr')">Instances</p><div id="section.i:Expr" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Typeable-Internal.html#t:Typeable1">Typeable1</a> <a href="CoreSyn.html#t:Expr">Expr</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Data.html#t:Data">Data</a> b =&gt; <a href="../base-4.5.1.0/Data-Data.html#t:Data">Data</a> (<a href="CoreSyn.html#t:Expr">Expr</a> b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Outputable.html#t:OutputableBndr">OutputableBndr</a> b =&gt; <a href="Outputable.html#t:Outputable">Outputable</a> (<a href="CoreSyn.html#t:Expr">Expr</a> b)</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:Alt" class="def">Alt</a> b = (<a href="CoreSyn.html#t:AltCon">AltCon</a>, [b], <a href="CoreSyn.html#t:Expr">Expr</a> b)</p><div class="doc"><p>A case split alternative. Consists of the constructor leading to the alternative,
 the variables bound from the constructor, and the expression to be executed given that binding.
 The default alternative is <code>(DEFAULT, [], rhs)</code>
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Bind" class="def">Bind</a> b </p><div class="doc"><p>Binding, used for top level bindings in a module and local bindings in a <code>let</code>.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:NonRec" class="def">NonRec</a> b (<a href="CoreSyn.html#t:Expr">Expr</a> b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:Rec" class="def">Rec</a> [(b, <a href="CoreSyn.html#t:Expr">Expr</a> b)]</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:Bind" class="caption collapser" onclick="toggleSection('i:Bind')">Instances</p><div id="section.i:Bind" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Typeable-Internal.html#t:Typeable1">Typeable1</a> <a href="CoreSyn.html#t:Bind">Bind</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Data.html#t:Data">Data</a> b =&gt; <a href="../base-4.5.1.0/Data-Data.html#t:Data">Data</a> (<a href="CoreSyn.html#t:Bind">Bind</a> b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Outputable.html#t:OutputableBndr">OutputableBndr</a> b =&gt; <a href="Outputable.html#t:Outputable">Outputable</a> (<a href="CoreSyn.html#t:Bind">Bind</a> b)</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:AltCon" class="def">AltCon</a>  </p><div class="doc"><p>A case alternative constructor (i.e. pattern match)
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:DataAlt" class="def">DataAlt</a> <a href="DataCon.html#t:DataCon">DataCon</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:LitAlt" class="def">LitAlt</a> <a href="Literal.html#t:Literal">Literal</a></td><td class="doc"><p>A literal: <code>case e of { 1 -&gt; ... }</code>
 Invariant: always an *unlifted* literal
 See Note [Literal alternatives]
</p></td></tr><tr><td class="src"><a name="v:DEFAULT" class="def">DEFAULT</a></td><td class="doc"><p>Trivial alternative: <code>case e of { _ -&gt; ... }</code>
</p></td></tr></table></div><div class="subs instances"><p id="control.i:AltCon" class="caption collapser" onclick="toggleSection('i:AltCon')">Instances</p><div id="section.i:AltCon" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="CoreSyn.html#t:AltCon">AltCon</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Data.html#t:Data">Data</a> <a href="CoreSyn.html#t:AltCon">AltCon</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="CoreSyn.html#t:AltCon">AltCon</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="CoreSyn.html#t:AltCon">AltCon</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> <a href="CoreSyn.html#t:AltCon">AltCon</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="CoreSyn.html#t:AltCon">AltCon</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:Arg" class="def">Arg</a> b = <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Type synonym for expressions that occur in function argument positions.
 Only <code><a href="CoreSyn.html#t:Arg">Arg</a></code> should contain a <code><a href="Type.html#t:Type">Type</a></code> at top level, general <code><a href="CoreSyn.html#t:Expr">Expr</a></code> should not
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Tickish" class="def">Tickish</a> id </p><div class="doc"><p>Allows attaching extra information to points in expressions
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:ProfNote" class="def">ProfNote</a></td><td class="doc"><p>An <code>{-<a name=" SCC "></a>-}</code> profiling annotation, either automatically
 added by the desugarer as a result of -auto-all, or added by
 the user.
</p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:profNoteCC" class="def">profNoteCC</a> :: <a href="CostCentre.html#t:CostCentre">CostCentre</a></dt><dd class="doc"><p>the cost centre
</p></dd><dt class="src"><a name="v:profNoteCount" class="def">profNoteCount</a> :: !<a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc"><p>bump the entry count?
</p></dd><dt class="src"><a name="v:profNoteScope" class="def">profNoteScope</a> :: !<a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc"><p>scopes over the enclosed expression
 (i.e. not just a tick)
</p></dd></dl><div class="clear"></div></div></td></tr><tr><td class="src"><a name="v:HpcTick" class="def">HpcTick</a></td><td class="doc"><p>A <a href="tick.html">tick</a> used by HPC to track the execution of each
 subexpression in the original source code.
</p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:tickModule" class="def">tickModule</a> :: <a href="Module.html#t:Module">Module</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:tickId" class="def">tickId</a> :: !<a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr><tr><td class="src"><a name="v:Breakpoint" class="def">Breakpoint</a></td><td class="doc"><p>A breakpoint for the GHCi debugger.  This behaves like an HPC
 tick, but has a list of free variables which will be available
 for inspection in GHCi when the program stops at the breakpoint.
</p><p>NB. we must take account of these Ids when (a) counting free variables,
 and (b) substituting (don't substitute for them)
</p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:breakpointId" class="def">breakpointId</a> :: !<a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:breakpointFVs" class="def">breakpointFVs</a> :: [id]</dt><dd class="doc"><p>the order of this list is important:
 it matches the order of the lists in the
 appropriate entry in HscTypes.ModBreaks.
</p><p>Careful about substitution!  See
 Note [substTickish] in CoreSubst.
</p></dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Tickish" class="caption collapser" onclick="toggleSection('i:Tickish')">Instances</p><div id="section.i:Tickish" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Typeable-Internal.html#t:Typeable1">Typeable1</a> <a href="CoreSyn.html#t:Tickish">Tickish</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> id =&gt; <a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> (<a href="CoreSyn.html#t:Tickish">Tickish</a> id)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Data.html#t:Data">Data</a> id =&gt; <a href="../base-4.5.1.0/Data-Data.html#t:Data">Data</a> (<a href="CoreSyn.html#t:Tickish">Tickish</a> id)</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> id =&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> (<a href="CoreSyn.html#t:Tickish">Tickish</a> id)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> id =&gt; <a href="Outputable.html#t:Outputable">Outputable</a> (<a href="CoreSyn.html#t:Tickish">Tickish</a> id)</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:CoreProgram" class="def">CoreProgram</a> = [<a href="CoreSyn.html#t:CoreBind">CoreBind</a>]</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:CoreExpr" class="def">CoreExpr</a> = <a href="CoreSyn.html#t:Expr">Expr</a> <a href="CoreSyn.html#t:CoreBndr">CoreBndr</a></p><div class="doc"><p>Expressions where binders are <code><a href="CoreSyn.html#t:CoreBndr">CoreBndr</a></code>s
</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:CoreAlt" class="def">CoreAlt</a> = <a href="CoreSyn.html#t:Alt">Alt</a> <a href="CoreSyn.html#t:CoreBndr">CoreBndr</a></p><div class="doc"><p>Case alternatives where binders are <code><a href="CoreSyn.html#t:CoreBndr">CoreBndr</a></code>s
</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:CoreBind" class="def">CoreBind</a> = <a href="CoreSyn.html#t:Bind">Bind</a> <a href="CoreSyn.html#t:CoreBndr">CoreBndr</a></p><div class="doc"><p>Binding groups where binders are <code><a href="CoreSyn.html#t:CoreBndr">CoreBndr</a></code>s
</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:CoreArg" class="def">CoreArg</a> = <a href="CoreSyn.html#t:Arg">Arg</a> <a href="CoreSyn.html#t:CoreBndr">CoreBndr</a></p><div class="doc"><p>Argument expressions where binders are <code><a href="CoreSyn.html#t:CoreBndr">CoreBndr</a></code>s
</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:CoreBndr" class="def">CoreBndr</a> = <a href="Var.html#t:Var">Var</a></p><div class="doc"><p>The common case for the type of binders and variables when
 we are manipulating the Core language within GHC
</p></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TaggedExpr" class="def">TaggedExpr</a> t = <a href="CoreSyn.html#t:Expr">Expr</a> (<a href="CoreSyn.html#t:TaggedBndr">TaggedBndr</a> t)</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TaggedAlt" class="def">TaggedAlt</a> t = <a href="CoreSyn.html#t:Alt">Alt</a> (<a href="CoreSyn.html#t:TaggedBndr">TaggedBndr</a> t)</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TaggedBind" class="def">TaggedBind</a> t = <a href="CoreSyn.html#t:Bind">Bind</a> (<a href="CoreSyn.html#t:TaggedBndr">TaggedBndr</a> t)</p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:TaggedArg" class="def">TaggedArg</a> t = <a href="CoreSyn.html#t:Arg">Arg</a> (<a href="CoreSyn.html#t:TaggedBndr">TaggedBndr</a> t)</p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:TaggedBndr" class="def">TaggedBndr</a> t </p><div class="doc"><p>Binders are <em>tagged</em> with a t
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:TB" class="def">TB</a> <a href="CoreSyn.html#t:CoreBndr">CoreBndr</a> t</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:TaggedBndr" class="caption collapser" onclick="toggleSection('i:TaggedBndr')">Instances</p><div id="section.i:TaggedBndr" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> b =&gt; <a href="Outputable.html#t:OutputableBndr">OutputableBndr</a> (<a href="CoreSyn.html#t:TaggedBndr">TaggedBndr</a> b)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> b =&gt; <a href="Outputable.html#t:Outputable">Outputable</a> (<a href="CoreSyn.html#t:TaggedBndr">TaggedBndr</a> b)</td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><h2 id="g:2"><code><a href="CoreSyn.html#t:Expr">Expr</a></code> construction
</h2><div class="top"><p class="src"><a name="v:mkLets" class="def">mkLets</a> ::  [<a href="CoreSyn.html#t:Bind">Bind</a> b] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Bind all supplied binding groups over an expression in a nested let expression. Prefer to
 use <code><a href="MkCore.html#v:mkCoreLets">mkCoreLets</a></code> if possible
</p></div></div><div class="top"><p class="src"><a name="v:mkLams" class="def">mkLams</a> ::  [b] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Bind all supplied binders over an expression in a nested lambda expression. Prefer to
 use <code><a href="MkCore.html#v:mkCoreLams">mkCoreLams</a></code> if possible
</p></div></div><div class="top"><p class="src"><a name="v:mkApps" class="def">mkApps</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; [<a href="CoreSyn.html#t:Arg">Arg</a> b] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Apply a list of argument expressions to a function expression in a nested fashion. Prefer to
 use <code><a href="MkCore.html#v:mkCoreApps">mkCoreApps</a></code> if possible
</p></div></div><div class="top"><p class="src"><a name="v:mkTyApps" class="def">mkTyApps</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; [<a href="Type.html#t:Type">Type</a>] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Apply a list of type argument expressions to a function expression in a nested fashion
</p></div></div><div class="top"><p class="src"><a name="v:mkCoApps" class="def">mkCoApps</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; [<a href="Coercion.html#t:Coercion">Coercion</a>] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Apply a list of coercion argument expressions to a function expression in a nested fashion
</p></div></div><div class="top"><p class="src"><a name="v:mkVarApps" class="def">mkVarApps</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; [<a href="Var.html#t:Var">Var</a>] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Apply a list of type or value variables to a function expression in a nested fashion
</p></div></div><div class="top"><p class="src"><a name="v:mkIntLit" class="def">mkIntLit</a> ::  <a href="../base-4.5.1.0/Prelude.html#t:Integer">Integer</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Create a machine integer literal expression of type <code>Int#</code> from an <code>Integer</code>.
 If you want an expression of type <code>Int</code> use <code><a href="MkCore.html#v:mkIntExpr">mkIntExpr</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:mkIntLitInt" class="def">mkIntLitInt</a> ::  <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Create a machine integer literal expression of type <code>Int#</code> from an <code>Int</code>.
 If you want an expression of type <code>Int</code> use <code><a href="MkCore.html#v:mkIntExpr">mkIntExpr</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:mkWordLit" class="def">mkWordLit</a> ::  <a href="../base-4.5.1.0/Prelude.html#t:Integer">Integer</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Create a machine word literal expression of type  <code>Word#</code> from an <code>Integer</code>.
 If you want an expression of type <code>Word</code> use <code><a href="MkCore.html#v:mkWordExpr">mkWordExpr</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:mkWordLitWord" class="def">mkWordLitWord</a> ::  <a href="../base-4.5.1.0/Data-Word.html#t:Word">Word</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Create a machine word literal expression of type  <code>Word#</code> from a <code>Word</code>.
 If you want an expression of type <code>Word</code> use <code><a href="MkCore.html#v:mkWordExpr">mkWordExpr</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:mkWord64LitWord64" class="def">mkWord64LitWord64</a> ::  <a href="../base-4.5.1.0/Data-Word.html#t:Word64">Word64</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p></div><div class="top"><p class="src"><a name="v:mkInt64LitInt64" class="def">mkInt64LitInt64</a> ::  <a href="../base-4.5.1.0/Data-Int.html#t:Int64">Int64</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p></div><div class="top"><p class="src"><a name="v:mkCharLit" class="def">mkCharLit</a> ::  <a href="../base-4.5.1.0/Data-Char.html#t:Char">Char</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Create a machine character literal expression of type <code>Char#</code>.
 If you want an expression of type <code>Char</code> use <code><a href="MkCore.html#v:mkCharExpr">mkCharExpr</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:mkStringLit" class="def">mkStringLit</a> ::  <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Create a machine string literal expression of type <code>Addr#</code>.
 If you want an expression of type <code>String</code> use <code><a href="MkCore.html#v:mkStringExpr">mkStringExpr</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:mkFloatLit" class="def">mkFloatLit</a> ::  <a href="../base-4.5.1.0/Prelude.html#t:Rational">Rational</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Create a machine single precision literal expression of type <code>Float#</code> from a <code>Rational</code>.
 If you want an expression of type <code>Float</code> use <code><a href="MkCore.html#v:mkFloatExpr">mkFloatExpr</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:mkFloatLitFloat" class="def">mkFloatLitFloat</a> ::  <a href="../base-4.5.1.0/Prelude.html#t:Float">Float</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Create a machine single precision literal expression of type <code>Float#</code> from a <code>Float</code>.
 If you want an expression of type <code>Float</code> use <code><a href="MkCore.html#v:mkFloatExpr">mkFloatExpr</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:mkDoubleLit" class="def">mkDoubleLit</a> ::  <a href="../base-4.5.1.0/Prelude.html#t:Rational">Rational</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Create a machine double precision literal expression of type <code>Double#</code> from a <code>Rational</code>.
 If you want an expression of type <code>Double</code> use <code><a href="MkCore.html#v:mkDoubleExpr">mkDoubleExpr</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:mkDoubleLitDouble" class="def">mkDoubleLitDouble</a> ::  <a href="../base-4.5.1.0/Prelude.html#t:Double">Double</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Create a machine double precision literal expression of type <code>Double#</code> from a <code>Double</code>.
 If you want an expression of type <code>Double</code> use <code><a href="MkCore.html#v:mkDoubleExpr">mkDoubleExpr</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:mkConApp" class="def">mkConApp</a> ::  <a href="DataCon.html#t:DataCon">DataCon</a> -&gt; [<a href="CoreSyn.html#t:Arg">Arg</a> b] -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Apply a list of argument expressions to a data constructor in a nested fashion. Prefer to
 use <code><a href="MkCore.html#v:mkCoreConApps">mkCoreConApps</a></code> if possible
</p></div></div><div class="top"><p class="src"><a name="v:mkTyBind" class="def">mkTyBind</a> :: <a href="Var.html#t:TyVar">TyVar</a> -&gt; <a href="Type.html#t:Type">Type</a> -&gt; <a href="CoreSyn.html#t:CoreBind">CoreBind</a></p><div class="doc"><p>Create a binding group where a type variable is bound to a type. Per <a href="CoreSyn.html#type_let">CoreSyn</a>,
 this can only be used to bind something in a non-recursive <code>let</code> expression
</p></div></div><div class="top"><p class="src"><a name="v:mkCoBind" class="def">mkCoBind</a> :: <a href="Var.html#t:CoVar">CoVar</a> -&gt; <a href="Coercion.html#t:Coercion">Coercion</a> -&gt; <a href="CoreSyn.html#t:CoreBind">CoreBind</a></p><div class="doc"><p>Create a binding group where a type variable is bound to a type. Per <a href="CoreSyn.html#type_let">CoreSyn</a>,
 this can only be used to bind something in a non-recursive <code>let</code> expression
</p></div></div><div class="top"><p class="src"><a name="v:varToCoreExpr" class="def">varToCoreExpr</a> ::  <a href="CoreSyn.html#t:CoreBndr">CoreBndr</a> -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> b</p><div class="doc"><p>Convert a binder into either a <code><a href="Var.html#t:Var">Var</a></code> or <code><a href="Type.html#t:Type">Type</a></code> <code><a href="CoreSyn.html#t:Expr">Expr</a></code> appropriately
</p></div></div><div class="top"><p class="src"><a name="v:varsToCoreExprs" class="def">varsToCoreExprs</a> ::  [<a href="CoreSyn.html#t:CoreBndr">CoreBndr</a>] -&gt; [<a href="CoreSyn.html#t:Expr">Expr</a> b]</p></div><div class="top"><p class="src"><a name="v:isId" class="def">isId</a> :: <a href="Var.html#t:Var">Var</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:cmpAltCon" class="def">cmpAltCon</a> :: <a href="CoreSyn.html#t:AltCon">AltCon</a> -&gt; <a href="CoreSyn.html#t:AltCon">AltCon</a> -&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></p><div class="doc"><p>Compares <code><a href="CoreSyn.html#t:AltCon">AltCon</a></code>s within a single list of alternatives
</p></div></div><div class="top"><p class="src"><a name="v:cmpAlt" class="def">cmpAlt</a> ::  <a href="CoreSyn.html#t:Alt">Alt</a> b -&gt; <a href="CoreSyn.html#t:Alt">Alt</a> b -&gt; <a href="../base-4.5.1.0/Data-Ord.html#t:Ordering">Ordering</a></p></div><div class="top"><p class="src"><a name="v:ltAlt" class="def">ltAlt</a> ::  <a href="CoreSyn.html#t:Alt">Alt</a> b -&gt; <a href="CoreSyn.html#t:Alt">Alt</a> b -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><h2 id="g:3">Simple <code><a href="CoreSyn.html#t:Expr">Expr</a></code> access functions and predicates
</h2><div class="top"><p class="src"><a name="v:bindersOf" class="def">bindersOf</a> ::  <a href="CoreSyn.html#t:Bind">Bind</a> b -&gt; [b]</p><div class="doc"><p>Extract every variable by this group
</p></div></div><div class="top"><p class="src"><a name="v:bindersOfBinds" class="def">bindersOfBinds</a> ::  [<a href="CoreSyn.html#t:Bind">Bind</a> b] -&gt; [b]</p><div class="doc"><p><code><a href="CoreSyn.html#v:bindersOf">bindersOf</a></code> applied to a list of binding groups
</p></div></div><div class="top"><p class="src"><a name="v:rhssOfBind" class="def">rhssOfBind</a> ::  <a href="CoreSyn.html#t:Bind">Bind</a> b -&gt; [<a href="CoreSyn.html#t:Expr">Expr</a> b]</p></div><div class="top"><p class="src"><a name="v:rhssOfAlts" class="def">rhssOfAlts</a> ::  [<a href="CoreSyn.html#t:Alt">Alt</a> b] -&gt; [<a href="CoreSyn.html#t:Expr">Expr</a> b]</p></div><div class="top"><p class="src"><a name="v:collectBinders" class="def">collectBinders</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; ([b], <a href="CoreSyn.html#t:Expr">Expr</a> b)</p><div class="doc"><p>We often want to strip off leading lambdas before getting down to
 business. This function is your friend.
</p></div></div><div class="top"><p class="src"><a name="v:collectTyBinders" class="def">collectTyBinders</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; ([<a href="Var.html#t:TyVar">TyVar</a>], <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>)</p><div class="doc"><p>Collect as many type bindings as possible from the front of a nested lambda
</p></div></div><div class="top"><p class="src"><a name="v:collectValBinders" class="def">collectValBinders</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; ([<a href="Var.html#t:Id">Id</a>], <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>)</p><div class="doc"><p>Collect as many value bindings as possible from the front of a nested lambda
</p></div></div><div class="top"><p class="src"><a name="v:collectTyAndValBinders" class="def">collectTyAndValBinders</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; ([<a href="Var.html#t:TyVar">TyVar</a>], [<a href="Var.html#t:Id">Id</a>], <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>)</p><div class="doc"><p>Collect type binders from the front of the lambda first, 
 then follow up by collecting as many value bindings as possible
 from the resulting stripped expression
</p></div></div><div class="top"><p class="src"><a name="v:collectArgs" class="def">collectArgs</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; (<a href="CoreSyn.html#t:Expr">Expr</a> b, [<a href="CoreSyn.html#t:Arg">Arg</a> b])</p><div class="doc"><p>Takes a nested application expression and returns the the function
 being applied and the arguments to which it is applied
</p></div></div><div class="top"><p class="src"><a name="v:flattenBinds" class="def">flattenBinds</a> ::  [<a href="CoreSyn.html#t:Bind">Bind</a> b] -&gt; [(b, <a href="CoreSyn.html#t:Expr">Expr</a> b)]</p><div class="doc"><p>Collapse all the bindings in the supplied groups into a single
 list of lhs/rhs pairs suitable for binding in a <code><a href="CoreSyn.html#v:Rec">Rec</a></code> binding group
</p></div></div><div class="top"><p class="src"><a name="v:isValArg" class="def">isValArg</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Returns <code>False</code> iff the expression is a <code><a href="Type.html#t:Type">Type</a></code> or <code><a href="Coercion.html#t:Coercion">Coercion</a></code>
 expression at its top level
</p></div></div><div class="top"><p class="src"><a name="v:isTypeArg" class="def">isTypeArg</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Returns <code>True</code> iff the expression is a <code><a href="Type.html#t:Type">Type</a></code> expression at its
 top level.  Note this does NOT include <code><a href="Coercion.html#t:Coercion">Coercion</a></code>s.
</p></div></div><div class="top"><p class="src"><a name="v:isTyCoArg" class="def">isTyCoArg</a> ::  <a href="CoreSyn.html#t:Expr">Expr</a> b -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Returns <code>True</code> iff the expression is a <code><a href="Type.html#t:Type">Type</a></code> or <code><a href="Coercion.html#t:Coercion">Coercion</a></code>
 expression at its top level
</p></div></div><div class="top"><p class="src"><a name="v:valArgCount" class="def">valArgCount</a> ::  [<a href="CoreSyn.html#t:Arg">Arg</a> b] -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></p><div class="doc"><p>The number of argument expressions that are values rather than types at their top level
</p></div></div><div class="top"><p class="src"><a name="v:valBndrCount" class="def">valBndrCount</a> :: [<a href="CoreSyn.html#t:CoreBndr">CoreBndr</a>] -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></p><div class="doc"><p>The number of binders that bind values rather than types
</p></div></div><div class="top"><p class="src"><a name="v:isRuntimeArg" class="def">isRuntimeArg</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Will this argument expression exist at runtime?
</p></div></div><div class="top"><p class="src"><a name="v:isRuntimeVar" class="def">isRuntimeVar</a> :: <a href="Var.html#t:Var">Var</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Will this variable exist at runtime?
</p></div></div><div class="top"><p class="src"><a name="v:tickishCounts" class="def">tickishCounts</a> ::  <a href="CoreSyn.html#t:Tickish">Tickish</a> id -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>A <a href="tick.html">tick</a> note is one that counts evaluations in some way.  We
 cannot discard a tick, and the compiler should preserve the number
 of ticks as far as possible.
</p><p>Hwever, we stil allow the simplifier to increase or decrease
 sharing, so in practice the actual number of ticks may vary, except
 that we never change the value from zero to non-zero or vice versa.
</p></div></div><div class="top"><p class="src"><a name="v:tickishScoped" class="def">tickishScoped</a> ::  <a href="CoreSyn.html#t:Tickish">Tickish</a> id -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:tickishIsCode" class="def">tickishIsCode</a> ::  <a href="CoreSyn.html#t:Tickish">Tickish</a> id -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Return True if this source annotation compiles to some code, or will
 disappear before the backend.
</p></div></div><div class="top"><p class="src"><a name="v:mkNoTick" class="def">mkNoTick</a> ::  <a href="CoreSyn.html#t:Tickish">Tickish</a> id -&gt; <a href="CoreSyn.html#t:Tickish">Tickish</a> id</p></div><div class="top"><p class="src"><a name="v:mkNoScope" class="def">mkNoScope</a> ::  <a href="CoreSyn.html#t:Tickish">Tickish</a> id -&gt; <a href="CoreSyn.html#t:Tickish">Tickish</a> id</p></div><div class="top"><p class="src"><a name="v:tickishCanSplit" class="def">tickishCanSplit</a> :: <a href="CoreSyn.html#t:Tickish">Tickish</a> <a href="Var.html#t:Id">Id</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Return True if this Tick can be split into (tick,scope) parts with
 <code><a href="CoreSyn.html#v:mkNoScope">mkNoScope</a></code> and <code><a href="CoreSyn.html#v:mkNoTick">mkNoTick</a></code> respectively.
</p></div></div><h1 id="g:4">Unfolding data types
</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Unfolding" class="def">Unfolding</a>  </p><div class="doc"><p>Records the <em>unfolding</em> of an identifier, which is approximately the form the
 identifier would have if we substituted its definition in for the identifier.
 This type should be treated as abstract everywhere except in <a href="CoreUnfold.html">CoreUnfold</a>
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:NoUnfolding" class="def">NoUnfolding</a></td><td class="doc"><p>We have no information about the unfolding
</p></td></tr><tr><td class="src"><a name="v:OtherCon" class="def">OtherCon</a> [<a href="CoreSyn.html#t:AltCon">AltCon</a>]</td><td class="doc"><p>It ain't one of these constructors.
 <code>OtherCon xs</code> also indicates that something has been evaluated
 and hence there's no point in re-evaluating it.
 <code>OtherCon []</code> is used even for non-data-type values
 to indicated evaluated-ness.  Notably:
</p><pre> data C = C !(Int -&gt; Int)
 case x of { C f -&gt; ... }
</pre><p>Here, <code>f</code> gets an <code>OtherCon []</code> unfolding.
</p></td></tr><tr><td class="src"><a name="v:DFunUnfolding" class="def">DFunUnfolding</a> <a href="BasicTypes.html#t:Arity">Arity</a> <a href="DataCon.html#t:DataCon">DataCon</a> [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>]</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreUnfolding" class="def">CoreUnfolding</a></td><td class="doc"><p>An unfolding with redundant cached information. Parameters:
</p><p>uf_tmpl: Template used to perform unfolding; 
           NB: Occurrence info is guaranteed correct: 
	           see Note [OccInfo in unfoldings and rules]
</p><p>uf_is_top: Is this a top level binding?
</p><p>uf_is_value: <code>exprIsHNF</code> template (cached); it is ok to discard a <code><a href="../base-4.5.1.0/Prelude.html#v:seq">seq</a></code> on
     this variable
</p><p>uf_is_cheap:  Does this waste only a little work if we expand it inside an inlining?
     Basically this is a cached version of <code>exprIsCheap</code>
</p><p>uf_guidance:  Tells us about the <em>size</em> of the unfolding template
</p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:uf_tmpl" class="def">uf_tmpl</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:uf_src" class="def">uf_src</a> :: <a href="CoreSyn.html#t:UnfoldingSource">UnfoldingSource</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:uf_is_top" class="def">uf_is_top</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:uf_arity" class="def">uf_arity</a> :: <a href="BasicTypes.html#t:Arity">Arity</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:uf_is_value" class="def">uf_is_value</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:uf_is_conlike" class="def">uf_is_conlike</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:uf_is_cheap" class="def">uf_is_cheap</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:uf_expandable" class="def">uf_expandable</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:uf_guidance" class="def">uf_guidance</a> :: <a href="CoreSyn.html#t:UnfoldingGuidance">UnfoldingGuidance</a></dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:Unfolding" class="caption collapser" onclick="toggleSection('i:Unfolding')">Instances</p><div id="section.i:Unfolding" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="CoreSyn.html#t:Unfolding">Unfolding</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:UnfoldingGuidance" class="def">UnfoldingGuidance</a>  </p><div class="doc"><p><code><a href="CoreSyn.html#t:UnfoldingGuidance">UnfoldingGuidance</a></code> says when unfolding should take place
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:UnfWhen" class="def">UnfWhen</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:ug_unsat_ok" class="def">ug_unsat_ok</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:ug_boring_ok" class="def">ug_boring_ok</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr><tr><td class="src"><a name="v:UnfIfGoodArgs" class="def">UnfIfGoodArgs</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:ug_args" class="def">ug_args</a> :: [<a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a>]</dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:ug_size" class="def">ug_size</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:ug_res" class="def">ug_res</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr><tr><td class="src"><a name="v:UnfNever" class="def">UnfNever</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:UnfoldingGuidance" class="caption collapser" onclick="toggleSection('i:UnfoldingGuidance')">Instances</p><div id="section.i:UnfoldingGuidance" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="CoreSyn.html#t:UnfoldingGuidance">UnfoldingGuidance</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:UnfoldingSource" class="def">UnfoldingSource</a>  </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:InlineRhs" class="def">InlineRhs</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:InlineStable" class="def">InlineStable</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:InlineCompulsory" class="def">InlineCompulsory</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:InlineWrapper" class="def">InlineWrapper</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:UnfoldingSource" class="caption collapser" onclick="toggleSection('i:UnfoldingSource')">Instances</p><div id="section.i:UnfoldingSource" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="CoreSyn.html#t:UnfoldingSource">UnfoldingSource</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><h2 id="g:5">Constructing <code><a href="CoreSyn.html#t:Unfolding">Unfolding</a></code>s
</h2><div class="top"><p class="src"><a name="v:noUnfolding" class="def">noUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a></p><div class="doc"><p>There is no known <code><a href="CoreSyn.html#t:Unfolding">Unfolding</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:evaldUnfolding" class="def">evaldUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a></p><div class="doc"><p>This unfolding marks the associated thing as being evaluated
</p></div></div><div class="top"><p class="src"><a name="v:mkOtherCon" class="def">mkOtherCon</a> :: [<a href="CoreSyn.html#t:AltCon">AltCon</a>] -&gt; <a href="CoreSyn.html#t:Unfolding">Unfolding</a></p></div><div class="top"><p class="src"><a name="v:unSaturatedOk" class="def">unSaturatedOk</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:needSaturated" class="def">needSaturated</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:boringCxtOk" class="def">boringCxtOk</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:boringCxtNotOk" class="def">boringCxtNotOk</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><h2 id="g:6">Predicates and deconstruction on <code><a href="CoreSyn.html#t:Unfolding">Unfolding</a></code>
</h2><div class="top"><p class="src"><a name="v:unfoldingTemplate" class="def">unfoldingTemplate</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Retrieves the template of an unfolding: panics if none is known
</p></div></div><div class="top"><p class="src"><a name="v:setUnfoldingTemplate" class="def">setUnfoldingTemplate</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:Unfolding">Unfolding</a></p></div><div class="top"><p class="src"><a name="v:expandUnfolding_maybe" class="def">expandUnfolding_maybe</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p></div><div class="top"><p class="src"><a name="v:maybeUnfoldingTemplate" class="def">maybeUnfoldingTemplate</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Retrieves the template of an unfolding if possible
</p></div></div><div class="top"><p class="src"><a name="v:otherCons" class="def">otherCons</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; [<a href="CoreSyn.html#t:AltCon">AltCon</a>]</p><div class="doc"><p>The constructors that the unfolding could never be: 
 returns <code>[]</code> if no information is available
</p></div></div><div class="top"><p class="src"><a name="v:unfoldingArity" class="def">unfoldingArity</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="BasicTypes.html#t:Arity">Arity</a></p></div><div class="top"><p class="src"><a name="v:isValueUnfolding" class="def">isValueUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Determines if it is certainly the case that the unfolding will
 yield a value (something in HNF): returns <code>False</code> if unsure
</p></div></div><div class="top"><p class="src"><a name="v:isEvaldUnfolding" class="def">isEvaldUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Determines if it possibly the case that the unfolding will
 yield a value. Unlike <code><a href="CoreSyn.html#v:isValueUnfolding">isValueUnfolding</a></code> it returns <code>True</code>
 for <code><a href="CoreSyn.html#v:OtherCon">OtherCon</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:isCheapUnfolding" class="def">isCheapUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Is the thing we will unfold into certainly cheap?
</p></div></div><div class="top"><p class="src"><a name="v:isExpandableUnfolding" class="def">isExpandableUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isConLikeUnfolding" class="def">isConLikeUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p><code>True</code> if the unfolding is a constructor application, the application
 of a CONLIKE function or <code><a href="CoreSyn.html#v:OtherCon">OtherCon</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:isCompulsoryUnfolding" class="def">isCompulsoryUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isStableUnfolding" class="def">isStableUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isStableCoreUnfolding_maybe" class="def">isStableCoreUnfolding_maybe</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="CoreSyn.html#t:UnfoldingSource">UnfoldingSource</a></p></div><div class="top"><p class="src"><a name="v:isClosedUnfolding" class="def">isClosedUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:hasSomeUnfolding" class="def">hasSomeUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p><div class="doc"><p>Only returns False if there is no unfolding information available at all
</p></div></div><div class="top"><p class="src"><a name="v:canUnfold" class="def">canUnfold</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:neverUnfoldGuidance" class="def">neverUnfoldGuidance</a> :: <a href="CoreSyn.html#t:UnfoldingGuidance">UnfoldingGuidance</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isStableSource" class="def">isStableSource</a> :: <a href="CoreSyn.html#t:UnfoldingSource">UnfoldingSource</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><h1 id="g:7">Strictness
</h1><div class="top"><p class="src"><a name="v:seqExpr" class="def">seqExpr</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; ()</p></div><div class="top"><p class="src"><a name="v:seqExprs" class="def">seqExprs</a> :: [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; ()</p></div><div class="top"><p class="src"><a name="v:seqUnfolding" class="def">seqUnfolding</a> :: <a href="CoreSyn.html#t:Unfolding">Unfolding</a> -&gt; ()</p></div><h1 id="g:8">Annotated expression data types
</h1><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:AnnExpr" class="def">AnnExpr</a> bndr annot = (annot, <a href="CoreSyn.html#t:AnnExpr-39-">AnnExpr'</a> bndr annot)</p><div class="doc"><p>Annotated core: allows annotation at every node in the tree
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:AnnExpr-39-" class="def">AnnExpr'</a> bndr annot </p><div class="doc"><p>A clone of the <code><a href="CoreSyn.html#t:Expr">Expr</a></code> type but allowing annotation at every tree node
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:AnnVar" class="def">AnnVar</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:AnnLit" class="def">AnnLit</a> <a href="Literal.html#t:Literal">Literal</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:AnnLam" class="def">AnnLam</a> bndr (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:AnnApp" class="def">AnnApp</a> (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot) (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:AnnCase" class="def">AnnCase</a> (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot) bndr <a href="Type.html#t:Type">Type</a> [<a href="CoreSyn.html#t:AnnAlt">AnnAlt</a> bndr annot]</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:AnnLet" class="def">AnnLet</a> (<a href="CoreSyn.html#t:AnnBind">AnnBind</a> bndr annot) (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:AnnCast" class="def">AnnCast</a> (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot) (annot, <a href="Coercion.html#t:Coercion">Coercion</a>)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:AnnTick" class="def">AnnTick</a> (<a href="CoreSyn.html#t:Tickish">Tickish</a> <a href="Var.html#t:Id">Id</a>) (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:AnnType" class="def">AnnType</a> <a href="Type.html#t:Type">Type</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:AnnCoercion" class="def">AnnCoercion</a> <a href="Coercion.html#t:Coercion">Coercion</a></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:AnnBind" class="def">AnnBind</a> bndr annot </p><div class="doc"><p>A clone of the <code><a href="CoreSyn.html#t:Bind">Bind</a></code> type but allowing annotation at every tree node
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:AnnNonRec" class="def">AnnNonRec</a> bndr (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:AnnRec" class="def">AnnRec</a> [(bndr, <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)]</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:AnnAlt" class="def">AnnAlt</a> bndr annot = (<a href="CoreSyn.html#t:AltCon">AltCon</a>, [bndr], <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)</p><div class="doc"><p>A clone of the <code><a href="CoreSyn.html#t:Alt">Alt</a></code> type but allowing annotation at every tree node
</p></div></div><h2 id="g:9">Operations on annotated expressions
</h2><div class="top"><p class="src"><a name="v:collectAnnArgs" class="def">collectAnnArgs</a> ::  <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> b a -&gt; (<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> b a, [<a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> b a])</p><div class="doc"><p>Takes a nested application expression and returns the the function
 being applied and the arguments to which it is applied
</p></div></div><h2 id="g:10">Operations on annotations
</h2><div class="top"><p class="src"><a name="v:deAnnotate" class="def">deAnnotate</a> ::  <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> bndr</p></div><div class="top"><p class="src"><a name="v:deAnnotate-39-" class="def">deAnnotate'</a> ::  <a href="CoreSyn.html#t:AnnExpr-39-">AnnExpr'</a> bndr annot -&gt; <a href="CoreSyn.html#t:Expr">Expr</a> bndr</p></div><div class="top"><p class="src"><a name="v:deAnnAlt" class="def">deAnnAlt</a> ::  <a href="CoreSyn.html#t:AnnAlt">AnnAlt</a> bndr annot -&gt; <a href="CoreSyn.html#t:Alt">Alt</a> bndr</p></div><div class="top"><p class="src"><a name="v:collectAnnBndrs" class="def">collectAnnBndrs</a> ::  <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot -&gt; ([bndr], <a href="CoreSyn.html#t:AnnExpr">AnnExpr</a> bndr annot)</p><div class="doc"><p>As <code><a href="CoreSyn.html#v:collectBinders">collectBinders</a></code> but for <code><a href="CoreSyn.html#t:AnnExpr">AnnExpr</a></code> rather than <code><a href="CoreSyn.html#t:Expr">Expr</a></code>
</p></div></div><h1 id="g:11">Core rule data types
</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:CoreRule" class="def">CoreRule</a>  </p><div class="doc"><p>A <code><a href="CoreSyn.html#t:CoreRule">CoreRule</a></code> is:
</p><ul><li> &quot;Local&quot; if the function it is a rule for is defined in the
   same module as the rule itself.
</li><li> &quot;Orphan&quot; if nothing on the LHS is defined in the same module
   as the rule itself
</li></ul></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Rule" class="def">Rule</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:ru_name" class="def">ru_name</a> :: <a href="CoreSyn.html#t:RuleName">RuleName</a></dt><dd class="doc"><p>As above
</p><p>Name of the rule, for communication with the user
</p></dd><dt class="src"><a name="v:ru_act" class="def">ru_act</a> :: <a href="BasicTypes.html#t:Activation">Activation</a></dt><dd class="doc"><p>When the rule is active
</p></dd><dt class="src"><a name="v:ru_fn" class="def">ru_fn</a> :: <a href="Name.html#t:Name">Name</a></dt><dd class="doc"><p>As above
</p><p>Name of the <code><a href="Id.html#t:Id">Id</a></code> at the head of this rule
</p></dd><dt class="src"><a name="v:ru_rough" class="def">ru_rough</a> :: [<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>]</dt><dd class="doc"><p>Name at the head of each argument to the left hand side
</p></dd><dt class="src"><a name="v:ru_bndrs" class="def">ru_bndrs</a> :: [<a href="CoreSyn.html#t:CoreBndr">CoreBndr</a>]</dt><dd class="doc"><p>Variables quantified over
</p></dd><dt class="src"><a name="v:ru_args" class="def">ru_args</a> :: [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>]</dt><dd class="doc"><p>Left hand side arguments
</p></dd><dt class="src"><a name="v:ru_rhs" class="def">ru_rhs</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></dt><dd class="doc"><p>Right hand side of the rule
 Occurrence info is guaranteed correct
 See Note [OccInfo in unfoldings and rules]
</p></dd><dt class="src"><a name="v:ru_auto" class="def">ru_auto</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc"><p><code>True</code>  <a href="=">=</a> this rule is auto-generated
   <code>False</code> <a href="=">=</a> generated at the users behest
   Main effect: reporting of orphan-hood
</p></dd><dt class="src"><a name="v:ru_local" class="def">ru_local</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc"><p><code>True</code> iff the fn at the head of the rule is
 defined in the same module as the rule
 and is not an implicit <code><a href="Var.html#t:Id">Id</a></code> (like a record selector,
 class operation, or data constructor)
</p></dd></dl><div class="clear"></div></div></td></tr><tr><td class="src"><a name="v:BuiltinRule" class="def">BuiltinRule</a></td><td class="doc"><p>Built-in rules are used for constant folding
 and suchlike.  They have no free variables.
</p></td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:ru_name" class="def">ru_name</a> :: <a href="CoreSyn.html#t:RuleName">RuleName</a></dt><dd class="doc"><p>As above
</p><p>Name of the rule, for communication with the user
</p></dd><dt class="src"><a name="v:ru_fn" class="def">ru_fn</a> :: <a href="Name.html#t:Name">Name</a></dt><dd class="doc"><p>As above
</p><p>Name of the <code><a href="Id.html#t:Id">Id</a></code> at the head of this rule
</p></dd><dt class="src"><a name="v:ru_nargs" class="def">ru_nargs</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></dt><dd class="doc"><p>Number of arguments that <code><a href="CoreSyn.html#v:ru_try">ru_try</a></code> consumes,
 if it fires, including type arguments
</p></dd><dt class="src"><a name="v:ru_try" class="def">ru_try</a> :: <a href="CoreSyn.html#t:IdUnfoldingFun">IdUnfoldingFun</a> -&gt; [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></dt><dd class="doc"><p>This function does the rewrite.  It given too many
 arguments, it simply discards them; the returned <code><a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></code>
 is just the rewrite of <code><a href="CoreSyn.html#v:ru_fn">ru_fn</a></code> applied to the first <code><a href="CoreSyn.html#v:ru_nargs">ru_nargs</a></code> args
</p></dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:CoreRule" class="caption collapser" onclick="toggleSection('i:CoreRule')">Instances</p><div id="section.i:CoreRule" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="CoreSyn.html#t:CoreRule">CoreRule</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:RuleName" class="def">RuleName</a> = <a href="FastString.html#t:FastString">FastString</a></p></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:IdUnfoldingFun" class="def">IdUnfoldingFun</a> = <a href="Var.html#t:Id">Id</a> -&gt; <a href="CoreSyn.html#t:Unfolding">Unfolding</a></p></div><h2 id="g:12">Operations on <code><a href="CoreSyn.html#t:CoreRule">CoreRule</a></code>s 
</h2><div class="top"><p class="src"><a name="v:seqRules" class="def">seqRules</a> :: [<a href="CoreSyn.html#t:CoreRule">CoreRule</a>] -&gt; ()</p></div><div class="top"><p class="src"><a name="v:ruleArity" class="def">ruleArity</a> :: <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></p><div class="doc"><p>The number of arguments the <code><a href="CoreSyn.html#v:ru_fn">ru_fn</a></code> must be applied 
 to before the rule can match on it
</p></div></div><div class="top"><p class="src"><a name="v:ruleName" class="def">ruleName</a> :: <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="CoreSyn.html#t:RuleName">RuleName</a></p></div><div class="top"><p class="src"><a name="v:ruleIdName" class="def">ruleIdName</a> :: <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="Name.html#t:Name">Name</a></p><div class="doc"><p>The <code><a href="Name.html#t:Name">Name</a></code> of the <code><a href="Id.html#t:Id">Id</a></code> at the head of the rule left hand side
</p></div></div><div class="top"><p class="src"><a name="v:ruleActivation" class="def">ruleActivation</a> :: <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="BasicTypes.html#t:Activation">Activation</a></p></div><div class="top"><p class="src"><a name="v:setRuleIdName" class="def">setRuleIdName</a> :: <a href="Name.html#t:Name">Name</a> -&gt; <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="CoreSyn.html#t:CoreRule">CoreRule</a></p><div class="doc"><p>Set the <code><a href="Name.html#t:Name">Name</a></code> of the <code><a href="Id.html#t:Id">Id</a></code> at the head of the rule left hand side
</p></div></div><div class="top"><p class="src"><a name="v:isBuiltinRule" class="def">isBuiltinRule</a> :: <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:isLocalRule" class="def">isLocalRule</a> :: <a href="CoreSyn.html#t:CoreRule">CoreRule</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><h1 id="g:13">Core vectorisation declarations data type
</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:CoreVect" class="def">CoreVect</a>  </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Vect" class="def">Vect</a> <a href="Var.html#t:Id">Id</a> (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:NoVect" class="def">NoVect</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:VectType" class="def">VectType</a> <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> <a href="TyCon.html#t:TyCon">TyCon</a> (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="TyCon.html#t:TyCon">TyCon</a>)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:VectClass" class="def">VectClass</a> <a href="TyCon.html#t:TyCon">TyCon</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:VectInst" class="def">VectInst</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:CoreVect" class="caption collapser" onclick="toggleSection('i:CoreVect')">Instances</p><div id="section.i:CoreVect" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="CoreSyn.html#t:CoreVect">CoreVect</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></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>