<!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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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>] -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -> <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> -> [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -> <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>] -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> <a href="Type.html#t:Type">Type</a> -> <a href="Type.html#t:Type">Type</a> -> [<a href="CoreSyn.html#t:CoreAlt">CoreAlt</a>] -> <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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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 => <a href="../base-4.5.1.0/Prelude.html#t:Integer">Integer</a> -> 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> -> <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> -> <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> -> <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 => <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> 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 => <a href="FastString.html#t:FastString">FastString</a> -> 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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> <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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></li><li class="src short"><a href="#v:mkChunkified">mkChunkified</a> :: ([a] -> a) -> [a] -> a</li><li class="src short"><a href="#v:mkCoreVarTup">mkCoreVarTup</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:mkCoreVarTupTy">mkCoreVarTupTy</a> :: [<a href="Var.html#t:Id">Id</a>] -> <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>] -> <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>] -> <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>] -> <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>] -> <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>] -> <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>] -> <a href="Var.html#t:Id">Id</a> -> <a href="Var.html#t:Id">Id</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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>] -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="Var.html#t:Id">Id</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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>] -> <a href="Var.html#t:Id">Id</a> -> <a href="Var.html#t:Id">Id</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> [<a href="Var.html#t:Id">Id</a>] -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="Var.html#t:Id">Id</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> <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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -> <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 => <a href="Type.html#t:Type">Type</a> -> <a href="Type.html#t:Type">Type</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> 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) => <a href="Type.html#t:Type">Type</a> -> ((<a href="Var.html#t:Id">Id</a>, <a href="Type.html#t:Type">Type</a>) -> (<a href="Var.html#t:Id">Id</a>, <a href="Type.html#t:Type">Type</a>) -> m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>) -> 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> -> <a href="Type.html#t:Type">Type</a> -> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <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> -> <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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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>] -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -> <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> -> [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -> <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>] -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> <a href="Type.html#t:Type">Type</a> -> <a href="Type.html#t:Type">Type</a> -> [<a href="CoreSyn.html#t:CoreAlt">CoreAlt</a>] -> <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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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> -> <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 => <a href="../base-4.5.1.0/Prelude.html#t:Integer">Integer</a> -> 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> -> <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> -> <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> -> <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 => <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> 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 => <a href="FastString.html#t:FastString">FastString</a> -> 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"> </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"> </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"> </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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> <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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> <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 "big tuples", and emulate them by creating and pattern matching on >nested< 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] -> a)</td><td class="doc"><p>"Small" 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">-> [a]</td><td class="doc"><p>Possible "big" list of things to construct from </p></td></tr><tr><td class="src">-> a</td><td class="doc"><p>Constructed thing made possible by recursive decomposition </p></td></tr></table></div><div class="doc"><p>Lifts a "small" constructor into a "big" 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>] -> <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>] -> <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>] -> <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>] -> <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>] -> <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>] -> <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>] -> <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>] -> <a href="Var.html#t:Id">Id</a> -> <a href="Var.html#t:Id">Id</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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 "big". </p><pre> mkSmallTupleSelector [x] x v e = [| e |] mkSmallTupleSelector [x,y,z] x v e = [| case e of v { (x,y,z) -> 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">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Body of the case </p></td></tr><tr><td class="src">-> <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">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Scrutinee </p></td></tr><tr><td class="src">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc empty"> </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">-> <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">-> <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">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Scrutinee </p></td></tr><tr><td class="src">-> <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 "big" 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">-> [<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">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Body of the case </p></td></tr><tr><td class="src">-> <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">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc"><p>Scrutinee </p></td></tr><tr><td class="src">-> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc empty"> </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 "big" 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> -> <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> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a> -> <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> -> [<a href="CoreSyn.html#t:CoreExpr">CoreExpr</a>] -> <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"> </td></tr><tr><td class="src">=> <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">-> <a href="Type.html#t:Type">Type</a></td><td class="doc"><p>Fold result type </p></td></tr><tr><td class="src">-> <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">-> <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">-> <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">-> m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc empty"> </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"> </td></tr><tr><td class="src">=> <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">-> ((<a href="Var.html#t:Id">Id</a>, <a href="Type.html#t:Type">Type</a>) -> (<a href="Var.html#t:Id">Id</a>, <a href="Type.html#t:Type">Type</a>) -> 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">-> m <a href="CoreSyn.html#t:CoreExpr">CoreExpr</a></td><td class="doc empty"> </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> -> <a href="Type.html#t:Type">Type</a> -> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -> <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> -> <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>