Sophie

Sophie

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

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>MkCore</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_MkCore.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">MkCore</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Constructing normal syntax
</a></li><li><a href="#g:2">Constructing boxed literals
</a></li><li><a href="#g:3">Floats
</a></li><li><a href="#g:4">Constructing/deconstructing implicit parameter boxes
</a></li><li><a href="#g:5">Constructing/deconstructing equality evidence boxes
</a></li><li><a href="#g:6">Constructing general big tuples
</a></li><li><a href="#g:7">Constructing small tuples
</a></li><li><a href="#g:8">Constructing big tuples
</a></li><li><a href="#g:9">Deconstructing small tuples
</a></li><li><a href="#g:10">Deconstructing big tuples
</a></li><li><a href="#g:11">Constructing list expressions
</a></li><li><a href="#g:12">Error Ids 
</a></li></ul></div><div id="description"><p class="caption">Description</p><div class="doc"><p>Handy functions for creating much Core syntax
</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"><a href="#v:mkCoreLet">mkCoreLet</a> :: <a href="CoreSyn.html#t:CoreBind">CoreBind</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkCoreLets">mkCoreLets</a> :: [<a href="CoreSyn.html#t:CoreBind">CoreBind</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkCoreApp">mkCoreApp</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkCoreApps">mkCoreApps</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkCoreConApps">mkCoreConApps</a> :: <a href="DataCon.html#t:DataCon">DataCon</a> -&gt; [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkCoreLams">mkCoreLams</a> :: [<a href="CoreSyn.html#t:CoreBndr">CoreBndr</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkWildCase">mkWildCase</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="Type.html#t:Type">Type</a> -&gt; <a href="Type.html#t:Type">Type</a> -&gt; [<a href="CoreSyn.html#t:CoreAlt">CoreAlt</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkIfThenElse">mkIfThenElse</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkWildValBinder">mkWildValBinder</a> :: <a href="Type.html#t:Type">Type</a> -&gt; <a href="Var.html#t:Id">Id</a></li><li class="src short"><a href="#v:mkWildEvBinder">mkWildEvBinder</a> :: <a href="Type.html#t:PredType">PredType</a> -&gt; <a href="Var.html#t:EvVar">EvVar</a></li><li class="src short"><a href="#v:mkWordExpr">mkWordExpr</a> :: <a href="../base-4.5.1.0/Prelude.html#t:Integer">Integer</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkWordExprWord">mkWordExprWord</a> :: <a href="../base-4.5.1.0/Data-Word.html#t:Word">Word</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkIntExpr">mkIntExpr</a> :: <a href="../base-4.5.1.0/Prelude.html#t:Integer">Integer</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkIntExprInt">mkIntExprInt</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkIntegerExpr">mkIntegerExpr</a> :: <a href="HscTypes.html#t:MonadThings">MonadThings</a> m =&gt; <a href="../base-4.5.1.0/Prelude.html#t:Integer">Integer</a> -&gt; m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkFloatExpr">mkFloatExpr</a> :: <a href="../base-4.5.1.0/Prelude.html#t:Float">Float</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkDoubleExpr">mkDoubleExpr</a> :: <a href="../base-4.5.1.0/Prelude.html#t:Double">Double</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkCharExpr">mkCharExpr</a> :: <a href="../base-4.5.1.0/Data-Char.html#t:Char">Char</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkStringExpr">mkStringExpr</a> :: <a href="HscTypes.html#t:MonadThings">MonadThings</a> m =&gt; <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkStringExprFS">mkStringExprFS</a> :: <a href="HscTypes.html#t:MonadThings">MonadThings</a> m =&gt; <a href="FastString.html#t:FastString">FastString</a> -&gt; m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:FloatBind">FloatBind</a> <ul class="subs"><li>= <a href="#v:FloatLet">FloatLet</a> <a href="CoreSyn.html#t:CoreBind">CoreBind</a>  </li><li>| <a href="#v:FloatCase">FloatCase</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> <a href="Var.html#t:Id">Id</a> <a href="CoreSyn.html#t:AltCon">AltCon</a> [<a href="Var.html#t:Var">Var</a>]  </li></ul></li><li class="src short"><a href="#v:wrapFloat">wrapFloat</a> :: <a href="MkCore.html#t:FloatBind">FloatBind</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkIPUnbox">mkIPUnbox</a> :: <a href="BasicTypes.html#t:IPName">IPName</a> <a href="Var.html#t:IpId">IpId</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkIPBox">mkIPBox</a> :: <a href="BasicTypes.html#t:IPName">IPName</a> <a href="Var.html#t:IpId">IpId</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkEqBox">mkEqBox</a> :: <a href="Coercion.html#t:Coercion">Coercion</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkChunkified">mkChunkified</a> ::  ([a] -&gt; a) -&gt; [a] -&gt; a</li><li class="src short"><a href="#v:mkCoreVarTup">mkCoreVarTup</a> :: [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkCoreVarTupTy">mkCoreVarTupTy</a> :: [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="Type.html#t:Type">Type</a></li><li class="src short"><a href="#v:mkCoreTup">mkCoreTup</a> :: [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkBigCoreVarTup">mkBigCoreVarTup</a> :: [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkBigCoreVarTupTy">mkBigCoreVarTupTy</a> :: [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="Type.html#t:Type">Type</a></li><li class="src short"><a href="#v:mkBigCoreTup">mkBigCoreTup</a> :: [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkBigCoreTupTy">mkBigCoreTupTy</a> :: [<a href="Type.html#t:Type">Type</a>] -&gt; <a href="Type.html#t:Type">Type</a></li><li class="src short"><a href="#v:mkSmallTupleSelector">mkSmallTupleSelector</a> :: [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="Var.html#t:Id">Id</a> -&gt; <a href="Var.html#t:Id">Id</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkSmallTupleCase">mkSmallTupleCase</a> :: [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="Var.html#t:Id">Id</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkTupleSelector">mkTupleSelector</a> :: [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="Var.html#t:Id">Id</a> -&gt; <a href="Var.html#t:Id">Id</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkTupleCase">mkTupleCase</a> :: <a href="UniqSupply.html#t:UniqSupply">UniqSupply</a> -&gt; [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="Var.html#t:Id">Id</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkNilExpr">mkNilExpr</a> :: <a href="Type.html#t:Type">Type</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkConsExpr">mkConsExpr</a> :: <a href="Type.html#t:Type">Type</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkListExpr">mkListExpr</a> :: <a href="Type.html#t:Type">Type</a> -&gt; [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkFoldrExpr">mkFoldrExpr</a> :: <a href="HscTypes.html#t:MonadThings">MonadThings</a> m =&gt; <a href="Type.html#t:Type">Type</a> -&gt; <a href="Type.html#t:Type">Type</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkBuildExpr">mkBuildExpr</a> :: (<a href="HscTypes.html#t:MonadThings">MonadThings</a> m, <a href="UniqSupply.html#t:MonadUnique">MonadUnique</a> m) =&gt; <a href="Type.html#t:Type">Type</a> -&gt; ((<a href="Var.html#t:Id">Id</a>, <a href="Type.html#t:Type">Type</a>) -&gt; (<a href="Var.html#t:Id">Id</a>, <a href="Type.html#t:Type">Type</a>) -&gt; m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>) -&gt; m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkRuntimeErrorApp">mkRuntimeErrorApp</a> :: <a href="Var.html#t:Id">Id</a> -&gt; <a href="Type.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkImpossibleExpr">mkImpossibleExpr</a> :: <a href="Type.html#t:Type">Type</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:errorIds">errorIds</a> :: [<a href="Var.html#t:Id">Id</a>]</li><li class="src short"><a href="#v:rEC_CON_ERROR_ID">rEC_CON_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></li><li class="src short"><a href="#v:iRREFUT_PAT_ERROR_ID">iRREFUT_PAT_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></li><li class="src short"><a href="#v:rUNTIME_ERROR_ID">rUNTIME_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></li><li class="src short"><a href="#v:nON_EXHAUSTIVE_GUARDS_ERROR_ID">nON_EXHAUSTIVE_GUARDS_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></li><li class="src short"><a href="#v:nO_METHOD_BINDING_ERROR_ID">nO_METHOD_BINDING_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></li><li class="src short"><a href="#v:pAT_ERROR_ID">pAT_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></li><li class="src short"><a href="#v:eRROR_ID">eRROR_ID</a> :: <a href="Var.html#t:Id">Id</a></li><li class="src short"><a href="#v:rEC_SEL_ERROR_ID">rEC_SEL_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></li><li class="src short"><a href="#v:aBSENT_ERROR_ID">aBSENT_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></li></ul></div><div id="interface"><h1 id="g:1">Constructing normal syntax
</h1><div class="top"><p class="src"><a name="v:mkCoreLet" class="def">mkCoreLet</a> :: <a href="CoreSyn.html#t:CoreBind">CoreBind</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Bind a binding group over an expression, using a <code>let</code> or <code>case</code> as
 appropriate (see <a href="CoreSyn.html#let_app_invariant">CoreSyn</a>)
</p></div></div><div class="top"><p class="src"><a name="v:mkCoreLets" class="def">mkCoreLets</a> :: [<a href="CoreSyn.html#t:CoreBind">CoreBind</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Bind a list of binding groups over an expression. The leftmost binding
 group becomes the outermost group in the resulting expression
</p></div></div><div class="top"><p class="src"><a name="v:mkCoreApp" class="def">mkCoreApp</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Construct an expression which represents the application of one expression
 to the other
</p></div></div><div class="top"><p class="src"><a name="v:mkCoreApps" class="def">mkCoreApps</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Construct an expression which represents the application of a number of
 expressions to another. The leftmost expression in the list is applied first
</p></div></div><div class="top"><p class="src"><a name="v:mkCoreConApps" class="def">mkCoreConApps</a> :: <a href="DataCon.html#t:DataCon">DataCon</a> -&gt; [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Construct an expression which represents the application of a number of
 expressions to that of a data constructor expression. The leftmost expression
 in the list is applied first
</p></div></div><div class="top"><p class="src"><a name="v:mkCoreLams" class="def">mkCoreLams</a> :: [<a href="CoreSyn.html#t:CoreBndr">CoreBndr</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Create a lambda where the given expression has a number of variables
 bound over it. The leftmost binder is that bound by the outermost
 lambda in the result
</p></div></div><div class="top"><p class="src"><a name="v:mkWildCase" class="def">mkWildCase</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="Type.html#t:Type">Type</a> -&gt; <a href="Type.html#t:Type">Type</a> -&gt; [<a href="CoreSyn.html#t:CoreAlt">CoreAlt</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p></div><div class="top"><p class="src"><a name="v:mkIfThenElse" class="def">mkIfThenElse</a> :: <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p></div><div class="top"><p class="src"><a name="v:mkWildValBinder" class="def">mkWildValBinder</a> :: <a href="Type.html#t:Type">Type</a> -&gt; <a href="Var.html#t:Id">Id</a></p><div class="doc"><p>Make a <em>wildcard binder</em>. This is typically used when you need a binder 
 that you expect to use only at a *binding* site.  Do not use it at
 occurrence sites because it has a single, fixed unique, and it's very
 easy to get into difficulties with shadowing.  That's why it is used so little.
 See Note [WildCard binders] in SimplEnv
</p></div></div><div class="top"><p class="src"><a name="v:mkWildEvBinder" class="def">mkWildEvBinder</a> :: <a href="Type.html#t:PredType">PredType</a> -&gt; <a href="Var.html#t:EvVar">EvVar</a></p></div><h1 id="g:2">Constructing boxed literals
</h1><div class="top"><p class="src"><a name="v:mkWordExpr" class="def">mkWordExpr</a> :: <a href="../base-4.5.1.0/Prelude.html#t:Integer">Integer</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Create a <code><a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></code> which will evaluate to the a <code>Word</code> with the given value
</p></div></div><div class="top"><p class="src"><a name="v:mkWordExprWord" class="def">mkWordExprWord</a> :: <a href="../base-4.5.1.0/Data-Word.html#t:Word">Word</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Create a <code><a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></code> which will evaluate to the given <code>Word</code>
</p></div></div><div class="top"><p class="src"><a name="v:mkIntExpr" class="def">mkIntExpr</a> :: <a href="../base-4.5.1.0/Prelude.html#t:Integer">Integer</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Create a <code><a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></code> which will evaluate to the given <code>Int</code>
</p></div></div><div class="top"><p class="src"><a name="v:mkIntExprInt" class="def">mkIntExprInt</a> :: <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Create a <code><a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></code> which will evaluate to the given <code>Int</code>
</p></div></div><div class="top"><p class="src"><a name="v:mkIntegerExpr" class="def">mkIntegerExpr</a> :: <a href="HscTypes.html#t:MonadThings">MonadThings</a> m =&gt; <a href="../base-4.5.1.0/Prelude.html#t:Integer">Integer</a> -&gt; m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Create a <code><a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></code> which will evaluate to the given <code>Integer</code>
</p></div></div><div class="top"><p class="src"><a name="v:mkFloatExpr" class="def">mkFloatExpr</a> :: <a href="../base-4.5.1.0/Prelude.html#t:Float">Float</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Create a <code><a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></code> which will evaluate to the given <code>Float</code>
</p></div></div><div class="top"><p class="src"><a name="v:mkDoubleExpr" class="def">mkDoubleExpr</a> :: <a href="../base-4.5.1.0/Prelude.html#t:Double">Double</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Create a <code><a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></code> which will evaluate to the given <code>Double</code>
</p></div></div><div class="top"><p class="src"><a name="v:mkCharExpr" class="def">mkCharExpr</a> :: <a href="../base-4.5.1.0/Data-Char.html#t:Char">Char</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Create a <code><a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></code> which will evaluate to the given <code>Char</code>
</p></div></div><div class="top"><p class="src"><a name="v:mkStringExpr" class="def">mkStringExpr</a> :: <a href="HscTypes.html#t:MonadThings">MonadThings</a> m =&gt; <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Create a <code><a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></code> which will evaluate to the given <code>String</code>
</p></div></div><div class="top"><p class="src"><a name="v:mkStringExprFS" class="def">mkStringExprFS</a> :: <a href="HscTypes.html#t:MonadThings">MonadThings</a> m =&gt; <a href="FastString.html#t:FastString">FastString</a> -&gt; m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Create a <code><a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></code> which will evaluate to a string morally equivalent to the given <code>FastString</code>
</p></div></div><h1 id="g:3">Floats
</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:FloatBind" class="def">FloatBind</a>  </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:FloatLet" class="def">FloatLet</a> <a href="CoreSyn.html#t:CoreBind">CoreBind</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:FloatCase" class="def">FloatCase</a> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> <a href="Var.html#t:Id">Id</a> <a href="CoreSyn.html#t:AltCon">AltCon</a> [<a href="Var.html#t:Var">Var</a>]</td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:FloatBind" class="caption collapser" onclick="toggleSection('i:FloatBind')">Instances</p><div id="section.i:FloatBind" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="MkCore.html#t:FloatBind">FloatBind</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:wrapFloat" class="def">wrapFloat</a> :: <a href="MkCore.html#t:FloatBind">FloatBind</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p></div><h1 id="g:4">Constructing/deconstructing implicit parameter boxes
</h1><div class="top"><p class="src"><a name="v:mkIPUnbox" class="def">mkIPUnbox</a> :: <a href="BasicTypes.html#t:IPName">IPName</a> <a href="Var.html#t:IpId">IpId</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p></div><div class="top"><p class="src"><a name="v:mkIPBox" class="def">mkIPBox</a> :: <a href="BasicTypes.html#t:IPName">IPName</a> <a href="Var.html#t:IpId">IpId</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p></div><h1 id="g:5">Constructing/deconstructing equality evidence boxes
</h1><div class="top"><p class="src"><a name="v:mkEqBox" class="def">mkEqBox</a> :: <a href="Coercion.html#t:Coercion">Coercion</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p></div><h1 id="g:6">Constructing general big tuples
</h1><div class="doc"><p><a name="big_tuples"></a>
</p><p>GHCs built in tuples can only go up to <code><a href="Constants.html#v:mAX_TUPLE_SIZE">mAX_TUPLE_SIZE</a></code> in arity, but
 we might concievably want to build such a massive tuple as part of the
 output of a desugaring stage (notably that for list comprehensions).
</p><p>We call tuples above this size &quot;big tuples&quot;, and emulate them by
 creating and pattern matching on &gt;nested&lt; tuples that are expressible
 by GHC.
</p><p>Nesting policy: it's better to have a 2-tuple of 10-tuples (3 objects)
 than a 10-tuple of 2-tuples (11 objects), so we want the leaves of any
 construction to be big.
</p><p>If you just use the <code><a href="MkCore.html#v:mkBigCoreTup">mkBigCoreTup</a></code>, <code><a href="MkCore.html#v:mkBigCoreVarTupTy">mkBigCoreVarTupTy</a></code>, <code><a href="MkCore.html#v:mkTupleSelector">mkTupleSelector</a></code>
 and <code><a href="MkCore.html#v:mkTupleCase">mkTupleCase</a></code> functions to do all your work with tuples you should be
 fine, and not have to worry about the arity limitation at all.
</p></div><div class="top"><p class="src"><a name="v:mkChunkified" class="def">mkChunkified</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: ([a] -&gt; a)</td><td class="doc"><p>&quot;Small&quot; constructor function, of maximum input arity <code><a href="Constants.html#v:mAX_TUPLE_SIZE">mAX_TUPLE_SIZE</a></code>
</p></td></tr><tr><td class="src">-&gt; [a]</td><td class="doc"><p>Possible &quot;big&quot; list of things to construct from
</p></td></tr><tr><td class="src">-&gt; a</td><td class="doc"><p>Constructed thing made possible by recursive decomposition
</p></td></tr></table></div><div class="doc"><p>Lifts a &quot;small&quot; constructor into a &quot;big&quot; constructor by recursive decompositon
</p></div></div><h1 id="g:7">Constructing small tuples
</h1><div class="top"><p class="src"><a name="v:mkCoreVarTup" class="def">mkCoreVarTup</a> :: [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Build a small tuple holding the specified variables
</p></div></div><div class="top"><p class="src"><a name="v:mkCoreVarTupTy" class="def">mkCoreVarTupTy</a> :: [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="Type.html#t:Type">Type</a></p><div class="doc"><p>Bulid the type of a small tuple that holds the specified variables
</p></div></div><div class="top"><p class="src"><a name="v:mkCoreTup" class="def">mkCoreTup</a> :: [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Build a small tuple holding the specified expressions
</p></div></div><h1 id="g:8">Constructing big tuples
</h1><div class="top"><p class="src"><a name="v:mkBigCoreVarTup" class="def">mkBigCoreVarTup</a> :: [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Build a big tuple holding the specified variables
</p></div></div><div class="top"><p class="src"><a name="v:mkBigCoreVarTupTy" class="def">mkBigCoreVarTupTy</a> :: [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="Type.html#t:Type">Type</a></p><div class="doc"><p>Build the type of a big tuple that holds the specified variables
</p></div></div><div class="top"><p class="src"><a name="v:mkBigCoreTup" class="def">mkBigCoreTup</a> :: [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Build a big tuple holding the specified expressions
</p></div></div><div class="top"><p class="src"><a name="v:mkBigCoreTupTy" class="def">mkBigCoreTupTy</a> :: [<a href="Type.html#t:Type">Type</a>] -&gt; <a href="Type.html#t:Type">Type</a></p><div class="doc"><p>Build the type of a big tuple that holds the specified type of thing
</p></div></div><h1 id="g:9">Deconstructing small tuples
</h1><div class="top"><p class="src"><a name="v:mkSmallTupleSelector" class="def">mkSmallTupleSelector</a> :: [<a href="Var.html#t:Id">Id</a>] -&gt; <a href="Var.html#t:Id">Id</a> -&gt; <a href="Var.html#t:Id">Id</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Like <code><a href="MkCore.html#v:mkTupleSelector">mkTupleSelector</a></code> but for tuples that are guaranteed
 never to be &quot;big&quot;.
</p><pre> mkSmallTupleSelector [x] x v e = [| e |]
 mkSmallTupleSelector [x,y,z] x v e = [| case e of v { (x,y,z) -&gt; x } |]
</pre></div></div><div class="top"><p class="src"><a name="v:mkSmallTupleCase" class="def">mkSmallTupleCase</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: [<a href="Var.html#t:Id">Id</a>]</td><td class="doc"><p>The tuple args
</p></td></tr><tr><td class="src">-&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Body of the case
</p></td></tr><tr><td class="src">-&gt; <a href="Var.html#t:Id">Id</a></td><td class="doc"><p>A variable of the same type as the scrutinee
</p></td></tr><tr><td class="src">-&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Scrutinee
</p></td></tr><tr><td class="src">-&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>As <code><a href="MkCore.html#v:mkTupleCase">mkTupleCase</a></code>, but for a tuple that is small enough to be guaranteed
 not to need nesting.
</p></div></div><h1 id="g:10">Deconstructing big tuples
</h1><div class="top"><p class="src"><a name="v:mkTupleSelector" class="def">mkTupleSelector</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: [<a href="Var.html#t:Id">Id</a>]</td><td class="doc"><p>The <code><a href="Var.html#t:Id">Id</a></code>s to pattern match the tuple against
</p></td></tr><tr><td class="src">-&gt; <a href="Var.html#t:Id">Id</a></td><td class="doc"><p>The <code><a href="Var.html#t:Id">Id</a></code> to select
</p></td></tr><tr><td class="src">-&gt; <a href="Var.html#t:Id">Id</a></td><td class="doc"><p>A variable of the same type as the scrutinee
</p></td></tr><tr><td class="src">-&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Scrutinee
</p></td></tr><tr><td class="src">-&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Selector expression
</p></td></tr></table></div><div class="doc"><p>Builds a selector which scrutises the given
 expression and extracts the one name from the list given.
 If you want the no-shadowing rule to apply, the caller
 is responsible for making sure that none of these names
 are in scope.
</p><p>If there is just one <code><a href="Var.html#t:Id">Id</a></code> in the tuple, then the selector is
 just the identity.
</p><p>If necessary, we pattern match on a &quot;big&quot; tuple.
</p></div></div><div class="top"><p class="src"><a name="v:mkTupleCase" class="def">mkTupleCase</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="UniqSupply.html#t:UniqSupply">UniqSupply</a></td><td class="doc"><p>For inventing names of intermediate variables
</p></td></tr><tr><td class="src">-&gt; [<a href="Var.html#t:Id">Id</a>]</td><td class="doc"><p>The tuple identifiers to pattern match on
</p></td></tr><tr><td class="src">-&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Body of the case
</p></td></tr><tr><td class="src">-&gt; <a href="Var.html#t:Id">Id</a></td><td class="doc"><p>A variable of the same type as the scrutinee
</p></td></tr><tr><td class="src">-&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Scrutinee
</p></td></tr><tr><td class="src">-&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>A generalization of <code><a href="MkCore.html#v:mkTupleSelector">mkTupleSelector</a></code>, allowing the body
 of the case to be an arbitrary expression.
</p><p>To avoid shadowing, we use uniques to invent new variables.
</p><p>If necessary we pattern match on a &quot;big&quot; tuple.
</p></div></div><h1 id="g:11">Constructing list expressions
</h1><div class="top"><p class="src"><a name="v:mkNilExpr" class="def">mkNilExpr</a> :: <a href="Type.html#t:Type">Type</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Makes a list <code>[]</code> for lists of the specified type
</p></div></div><div class="top"><p class="src"><a name="v:mkConsExpr" class="def">mkConsExpr</a> :: <a href="Type.html#t:Type">Type</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Makes a list <code>(:)</code> for lists of the specified type
</p></div></div><div class="top"><p class="src"><a name="v:mkListExpr" class="def">mkListExpr</a> :: <a href="Type.html#t:Type">Type</a> -&gt; [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p><div class="doc"><p>Make a list containing the given expressions, where the list has the given type
</p></div></div><div class="top"><p class="src"><a name="v:mkFoldrExpr" class="def">mkFoldrExpr</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: <a href="HscTypes.html#t:MonadThings">MonadThings</a> m</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">=&gt; <a href="Type.html#t:Type">Type</a></td><td class="doc"><p>Element type of the list
</p></td></tr><tr><td class="src">-&gt; <a href="Type.html#t:Type">Type</a></td><td class="doc"><p>Fold result type
</p></td></tr><tr><td class="src">-&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p><a href="Cons.html">Cons</a> function expression for the fold
</p></td></tr><tr><td class="src">-&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p><a href="Nil.html">Nil</a> expression for the fold
</p></td></tr><tr><td class="src">-&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>List expression being folded acress
</p></td></tr><tr><td class="src">-&gt; m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Make a fully applied <code><a href="../base-4.5.1.0/Data-List.html#v:foldr">foldr</a></code> expression
</p></div></div><div class="top"><p class="src"><a name="v:mkBuildExpr" class="def">mkBuildExpr</a></p><div class="subs arguments"><p class="caption">Arguments</p><table><tr><td class="src">:: (<a href="HscTypes.html#t:MonadThings">MonadThings</a> m, <a href="UniqSupply.html#t:MonadUnique">MonadUnique</a> m)</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src">=&gt; <a href="Type.html#t:Type">Type</a></td><td class="doc"><p>Type of list elements to be built
</p></td></tr><tr><td class="src">-&gt; ((<a href="Var.html#t:Id">Id</a>, <a href="Type.html#t:Type">Type</a>) -&gt; (<a href="Var.html#t:Id">Id</a>, <a href="Type.html#t:Type">Type</a>) -&gt; m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>)</td><td class="doc"><p>Function that, given information about the <code><a href="Var.html#t:Id">Id</a></code>s
 of the binders for the build worker function, returns
 the body of that worker
</p></td></tr><tr><td class="src">-&gt; m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="doc"><p>Make a <code>build</code> expression applied to a locally-bound worker function
</p></div></div><h1 id="g:12">Error Ids 
</h1><div class="top"><p class="src"><a name="v:mkRuntimeErrorApp" class="def">mkRuntimeErrorApp</a> :: <a href="Var.html#t:Id">Id</a> -&gt; <a href="Type.html#t:Type">Type</a> -&gt; <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p></div><div class="top"><p class="src"><a name="v:mkImpossibleExpr" class="def">mkImpossibleExpr</a> :: <a href="Type.html#t:Type">Type</a> -&gt; <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></p></div><div class="top"><p class="src"><a name="v:errorIds" class="def">errorIds</a> :: [<a href="Var.html#t:Id">Id</a>]</p></div><div class="top"><p class="src"><a name="v:rEC_CON_ERROR_ID" class="def">rEC_CON_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></p></div><div class="top"><p class="src"><a name="v:iRREFUT_PAT_ERROR_ID" class="def">iRREFUT_PAT_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></p></div><div class="top"><p class="src"><a name="v:rUNTIME_ERROR_ID" class="def">rUNTIME_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></p></div><div class="top"><p class="src"><a name="v:nON_EXHAUSTIVE_GUARDS_ERROR_ID" class="def">nON_EXHAUSTIVE_GUARDS_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></p></div><div class="top"><p class="src"><a name="v:nO_METHOD_BINDING_ERROR_ID" class="def">nO_METHOD_BINDING_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></p></div><div class="top"><p class="src"><a name="v:pAT_ERROR_ID" class="def">pAT_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></p></div><div class="top"><p class="src"><a name="v:eRROR_ID" class="def">eRROR_ID</a> :: <a href="Var.html#t:Id">Id</a></p></div><div class="top"><p class="src"><a name="v:rEC_SEL_ERROR_ID" class="def">rEC_SEL_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></p></div><div class="top"><p class="src"><a name="v:aBSENT_ERROR_ID" class="def">aBSENT_ERROR_ID</a> :: <a href="Var.html#t:Id">Id</a></p></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.11.0</p></div></body></html>