<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <!--Rendered using the Haskell Html Library v0.2--> <HTML ><HEAD ><META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=UTF-8" ><TITLE >MkCore</TITLE ><LINK HREF="haddock.css" REL="stylesheet" TYPE="text/css" ><SCRIPT SRC="haddock-util.js" TYPE="text/javascript" ></SCRIPT ><SCRIPT TYPE="text/javascript" >window.onload = function () {setSynopsis("mini_MkCore.html")};</SCRIPT ></HEAD ><BODY ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="topbar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><IMG SRC="haskell_icon.gif" WIDTH="16" HEIGHT="16" ALT=" " ></TD ><TD CLASS="title" >ghc-6.12.3: The GHC API</TD ><TD CLASS="topbut" ><A HREF="src/MkCore.html" >Source code</A ></TD ><TD CLASS="topbut" ><A HREF="index.html" >Contents</A ></TD ><TD CLASS="topbut" ><A HREF="doc-index.html" >Index</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="modulebar" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD ><FONT SIZE="6" >MkCore</FONT ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="section4" ><B >Contents</B ></TD ></TR ><TR ><TD ><DL ><DT ><A HREF="#1" >Constructing normal syntax </A ></DT ><DT ><A HREF="#2" >Constructing boxed literals </A ></DT ><DT ><A HREF="#3" >Constructing general big tuples </A ></DT ><DT ><A HREF="#4" >Constructing small tuples </A ></DT ><DT ><A HREF="#5" >Constructing big tuples </A ></DT ><DT ><A HREF="#6" >Deconstructing small tuples </A ></DT ><DT ><A HREF="#7" >Deconstructing big tuples </A ></DT ><DT ><A HREF="#8" >Constructing list expressions </A ></DT ></DL ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Description</TD ></TR ><TR ><TD CLASS="doc" >Handy functions for creating much Core syntax </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" >Synopsis</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkCoreLet" >mkCoreLet</A > :: <A HREF="CoreSyn.html#t%3ACoreBind" >CoreBind</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkCoreLets" >mkCoreLets</A > :: [<A HREF="CoreSyn.html#t%3ACoreBind" >CoreBind</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkCoreApp" >mkCoreApp</A > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkCoreApps" >mkCoreApps</A > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkCoreConApps" >mkCoreConApps</A > :: <A HREF="DataCon.html#t%3ADataCon" >DataCon</A > -> [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkCoreLams" >mkCoreLams</A > :: [<A HREF="CoreSyn.html#t%3ACoreBndr" >CoreBndr</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkWildCase" >mkWildCase</A > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> [<A HREF="CoreSyn.html#t%3ACoreAlt" >CoreAlt</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkWildBinder" >mkWildBinder</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Var.html#t%3AId" >Id</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkIfThenElse" >mkIfThenElse</A > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkWordExpr" >mkWordExpr</A > :: <A HREF="../base-4.2.0.2/Prelude.html#t%3AInteger" >Integer</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkWordExprWord" >mkWordExprWord</A > :: <A HREF="../base-4.2.0.2/Data-Word.html#t%3AWord" >Word</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkIntExpr" >mkIntExpr</A > :: <A HREF="../base-4.2.0.2/Prelude.html#t%3AInteger" >Integer</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkIntExprInt" >mkIntExprInt</A > :: <A HREF="../base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkIntegerExpr" >mkIntegerExpr</A > :: <A HREF="HscTypes.html#t%3AMonadThings" >MonadThings</A > m => <A HREF="../base-4.2.0.2/Prelude.html#t%3AInteger" >Integer</A > -> m <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkFloatExpr" >mkFloatExpr</A > :: <A HREF="../base-4.2.0.2/Prelude.html#t%3AFloat" >Float</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkDoubleExpr" >mkDoubleExpr</A > :: <A HREF="../base-4.2.0.2/Prelude.html#t%3ADouble" >Double</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkCharExpr" >mkCharExpr</A > :: <A HREF="../base-4.2.0.2/Data-Char.html#t%3AChar" >Char</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkStringExpr" >mkStringExpr</A > :: <A HREF="HscTypes.html#t%3AMonadThings" >MonadThings</A > m => <A HREF="../base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> m <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkStringExprFS" >mkStringExprFS</A > :: <A HREF="HscTypes.html#t%3AMonadThings" >MonadThings</A > m => <A HREF="FastString.html#t%3AFastString" >FastString</A > -> m <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkChunkified" >mkChunkified</A > :: ([a] -> a) -> [a] -> a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkCoreVarTup" >mkCoreVarTup</A > :: [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkCoreVarTupTy" >mkCoreVarTupTy</A > :: [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkCoreTup" >mkCoreTup</A > :: [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkCoreTupTy" >mkCoreTupTy</A > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkBigCoreVarTup" >mkBigCoreVarTup</A > :: [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkBigCoreVarTupTy" >mkBigCoreVarTupTy</A > :: [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkBigCoreTup" >mkBigCoreTup</A > :: [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkBigCoreTupTy" >mkBigCoreTupTy</A > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkSmallTupleSelector" >mkSmallTupleSelector</A > :: [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="Var.html#t%3AId" >Id</A > -> <A HREF="Var.html#t%3AId" >Id</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkSmallTupleCase" >mkSmallTupleCase</A > :: [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="Var.html#t%3AId" >Id</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkTupleSelector" >mkTupleSelector</A > :: [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="Var.html#t%3AId" >Id</A > -> <A HREF="Var.html#t%3AId" >Id</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkTupleCase" >mkTupleCase</A > :: <A HREF="UniqSupply.html#t%3AUniqSupply" >UniqSupply</A > -> [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="Var.html#t%3AId" >Id</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkNilExpr" >mkNilExpr</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkConsExpr" >mkConsExpr</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkListExpr" >mkListExpr</A > :: <A HREF="Type.html#t%3AType" >Type</A > -> [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkFoldrExpr" >mkFoldrExpr</A > :: <A HREF="HscTypes.html#t%3AMonadThings" >MonadThings</A > m => <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> m <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkBuildExpr" >mkBuildExpr</A > :: (<A HREF="HscTypes.html#t%3AMonadThings" >MonadThings</A > m, <A HREF="UniqSupply.html#t%3AMonadUnique" >MonadUnique</A > m) => <A HREF="Type.html#t%3AType" >Type</A > -> ((<A HREF="Var.html#t%3AId" >Id</A >, <A HREF="Type.html#t%3AType" >Type</A >) -> (<A HREF="Var.html#t%3AId" >Id</A >, <A HREF="Type.html#t%3AType" >Type</A >) -> m <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >) -> m <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="1" ><A NAME="1" >Constructing normal syntax </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkCoreLet" ><A NAME="v%3AmkCoreLet" ></A ></A ><B >mkCoreLet</B > :: <A HREF="CoreSyn.html#t%3ACoreBind" >CoreBind</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkCoreLet" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Bind a binding group over an expression, using a <TT >let</TT > or <TT >case</TT > as appropriate (see <A HREF="CoreSyn.html#let_app_invariant" >CoreSyn</A >) </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkCoreLets" ><A NAME="v%3AmkCoreLets" ></A ></A ><B >mkCoreLets</B > :: [<A HREF="CoreSyn.html#t%3ACoreBind" >CoreBind</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkCoreLets" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Bind a list of binding groups over an expression. The leftmost binding group becomes the outermost group in the resulting expression </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkCoreApp" ><A NAME="v%3AmkCoreApp" ></A ></A ><B >mkCoreApp</B > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkCoreApp" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Construct an expression which represents the application of one expression to the other </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkCoreApps" ><A NAME="v%3AmkCoreApps" ></A ></A ><B >mkCoreApps</B > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkCoreApps" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Construct an expression which represents the application of a number of expressions to another. The leftmost expression in the list is applied first </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkCoreConApps" ><A NAME="v%3AmkCoreConApps" ></A ></A ><B >mkCoreConApps</B > :: <A HREF="DataCon.html#t%3ADataCon" >DataCon</A > -> [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkCoreConApps" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >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 </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkCoreLams" ><A NAME="v%3AmkCoreLams" ></A ></A ><B >mkCoreLams</B > :: [<A HREF="CoreSyn.html#t%3ACoreBndr" >CoreBndr</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkCoreLams" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >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 </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkWildCase" ><A NAME="v%3AmkWildCase" ></A ></A ><B >mkWildCase</B > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Type.html#t%3AType" >Type</A > -> [<A HREF="CoreSyn.html#t%3ACoreAlt" >CoreAlt</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkWildCase" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkWildBinder" ><A NAME="v%3AmkWildBinder" ></A ></A ><B >mkWildBinder</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="Var.html#t%3AId" >Id</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkWildBinder" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >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. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkIfThenElse" ><A NAME="v%3AmkIfThenElse" ></A ></A ><B >mkIfThenElse</B > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkIfThenElse" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="2" ><A NAME="2" >Constructing boxed literals </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkWordExpr" ><A NAME="v%3AmkWordExpr" ></A ></A ><B >mkWordExpr</B > :: <A HREF="../base-4.2.0.2/Prelude.html#t%3AInteger" >Integer</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkWordExpr" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Create a <TT ><A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TT > which will evaluate to the a <TT >Word</TT > with the given value </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkWordExprWord" ><A NAME="v%3AmkWordExprWord" ></A ></A ><B >mkWordExprWord</B > :: <A HREF="../base-4.2.0.2/Data-Word.html#t%3AWord" >Word</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkWordExprWord" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Create a <TT ><A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TT > which will evaluate to the given <TT >Word</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkIntExpr" ><A NAME="v%3AmkIntExpr" ></A ></A ><B >mkIntExpr</B > :: <A HREF="../base-4.2.0.2/Prelude.html#t%3AInteger" >Integer</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkIntExpr" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Create a <TT ><A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TT > which will evaluate to the given <TT >Int</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkIntExprInt" ><A NAME="v%3AmkIntExprInt" ></A ></A ><B >mkIntExprInt</B > :: <A HREF="../base-4.2.0.2/Data-Int.html#t%3AInt" >Int</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkIntExprInt" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Create a <TT ><A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TT > which will evaluate to the given <TT >Int</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkIntegerExpr" ><A NAME="v%3AmkIntegerExpr" ></A ></A ><B >mkIntegerExpr</B > :: <A HREF="HscTypes.html#t%3AMonadThings" >MonadThings</A > m => <A HREF="../base-4.2.0.2/Prelude.html#t%3AInteger" >Integer</A > -> m <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkIntegerExpr" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Create a <TT ><A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TT > which will evaluate to the given <TT >Integer</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkFloatExpr" ><A NAME="v%3AmkFloatExpr" ></A ></A ><B >mkFloatExpr</B > :: <A HREF="../base-4.2.0.2/Prelude.html#t%3AFloat" >Float</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkFloatExpr" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Create a <TT ><A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TT > which will evaluate to the given <TT >Float</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkDoubleExpr" ><A NAME="v%3AmkDoubleExpr" ></A ></A ><B >mkDoubleExpr</B > :: <A HREF="../base-4.2.0.2/Prelude.html#t%3ADouble" >Double</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkDoubleExpr" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Create a <TT ><A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TT > which will evaluate to the given <TT >Double</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkCharExpr" ><A NAME="v%3AmkCharExpr" ></A ></A ><B >mkCharExpr</B > :: <A HREF="../base-4.2.0.2/Data-Char.html#t%3AChar" >Char</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkCharExpr" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Create a <TT ><A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TT > which will evaluate to the given <TT >Char</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkStringExpr" ><A NAME="v%3AmkStringExpr" ></A ></A ><B >mkStringExpr</B > :: <A HREF="HscTypes.html#t%3AMonadThings" >MonadThings</A > m => <A HREF="../base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> m <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkStringExpr" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Create a <TT ><A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TT > which will evaluate to the given <TT >String</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkStringExprFS" ><A NAME="v%3AmkStringExprFS" ></A ></A ><B >mkStringExprFS</B > :: <A HREF="HscTypes.html#t%3AMonadThings" >MonadThings</A > m => <A HREF="FastString.html#t%3AFastString" >FastString</A > -> m <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkStringExprFS" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Create a <TT ><A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TT > which will evaluate to a string morally equivalent to the given <TT >FastString</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="3" ><A NAME="3" >Constructing general big tuples </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="doc" ><P ><A NAME="big_tuples" ><A NAME="big_tuples" ></A ></A > </P ><P >GHCs built in tuples can only go up to <TT ><A HREF="Constants.html#v%3AmAX_TUPLE_SIZE" >mAX_TUPLE_SIZE</A ></TT > 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 <TT ><A HREF="MkCore.html#v%3AmkBigCoreTup" >mkBigCoreTup</A ></TT >, <TT ><A HREF="MkCore.html#v%3AmkBigCoreVarTupTy" >mkBigCoreVarTupTy</A ></TT >, <TT ><A HREF="MkCore.html#v%3AmkTupleSelector" >mkTupleSelector</A ></TT > and <TT ><A HREF="MkCore.html#v%3AmkTupleCase" >mkTupleCase</A ></TT > functions to do all your work with tuples you should be fine, and not have to worry about the arity limitation at all. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkChunkified" ><A NAME="v%3AmkChunkified" ></A ></A ><B >mkChunkified</B ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkChunkified" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: [a] -> a</TD ><TD CLASS="rdoc" >"Small" constructor function, of maximum input arity <TT ><A HREF="Constants.html#v%3AmAX_TUPLE_SIZE" >mAX_TUPLE_SIZE</A ></TT > </TD ></TR ><TR ><TD CLASS="arg" >-> [a]</TD ><TD CLASS="rdoc" >Possible "big" list of things to construct from </TD ></TR ><TR ><TD CLASS="arg" >-> a</TD ><TD CLASS="rdoc" >Constructed thing made possible by recursive decomposition </TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Lifts a "small" constructor into a "big" constructor by recursive decompositon </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="4" ><A NAME="4" >Constructing small tuples </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkCoreVarTup" ><A NAME="v%3AmkCoreVarTup" ></A ></A ><B >mkCoreVarTup</B > :: [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkCoreVarTup" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Build a small tuple holding the specified variables </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkCoreVarTupTy" ><A NAME="v%3AmkCoreVarTupTy" ></A ></A ><B >mkCoreVarTupTy</B > :: [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkCoreVarTupTy" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Bulid the type of a small tuple that holds the specified variables </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkCoreTup" ><A NAME="v%3AmkCoreTup" ></A ></A ><B >mkCoreTup</B > :: [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkCoreTup" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Build a small tuple holding the specified expressions </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkCoreTupTy" ><A NAME="v%3AmkCoreTupTy" ></A ></A ><B >mkCoreTupTy</B > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkCoreTupTy" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Build the type of a small tuple that holds the specified type of thing </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="5" ><A NAME="5" >Constructing big tuples </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkBigCoreVarTup" ><A NAME="v%3AmkBigCoreVarTup" ></A ></A ><B >mkBigCoreVarTup</B > :: [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkBigCoreVarTup" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Build a big tuple holding the specified variables </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkBigCoreVarTupTy" ><A NAME="v%3AmkBigCoreVarTupTy" ></A ></A ><B >mkBigCoreVarTupTy</B > :: [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkBigCoreVarTupTy" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Build the type of a big tuple that holds the specified variables </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkBigCoreTup" ><A NAME="v%3AmkBigCoreTup" ></A ></A ><B >mkBigCoreTup</B > :: [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkBigCoreTup" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Build a big tuple holding the specified expressions </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkBigCoreTupTy" ><A NAME="v%3AmkBigCoreTupTy" ></A ></A ><B >mkBigCoreTupTy</B > :: [<A HREF="Type.html#t%3AType" >Type</A >] -> <A HREF="Type.html#t%3AType" >Type</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkBigCoreTupTy" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Build the type of a big tuple that holds the specified type of thing </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="6" ><A NAME="6" >Deconstructing small tuples </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkSmallTupleSelector" ><A NAME="v%3AmkSmallTupleSelector" ></A ></A ><B >mkSmallTupleSelector</B > :: [<A HREF="Var.html#t%3AId" >Id</A >] -> <A HREF="Var.html#t%3AId" >Id</A > -> <A HREF="Var.html#t%3AId" >Id</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkSmallTupleSelector" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" ><P >Like <TT ><A HREF="MkCore.html#v%3AmkTupleSelector" >mkTupleSelector</A ></TT > 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 ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkSmallTupleCase" ><A NAME="v%3AmkSmallTupleCase" ></A ></A ><B >mkSmallTupleCase</B ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkSmallTupleCase" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: [<A HREF="Var.html#t%3AId" >Id</A >]</TD ><TD CLASS="rdoc" >The tuple args </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" >Body of the case </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Var.html#t%3AId" >Id</A ></TD ><TD CLASS="rdoc" >A variable of the same type as the scrutinee </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" >Scrutinee </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >As <TT ><A HREF="MkCore.html#v%3AmkTupleCase" >mkTupleCase</A ></TT >, but for a tuple that is small enough to be guaranteed not to need nesting. </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="7" ><A NAME="7" >Deconstructing big tuples </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkTupleSelector" ><A NAME="v%3AmkTupleSelector" ></A ></A ><B >mkTupleSelector</B ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkTupleSelector" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: [<A HREF="Var.html#t%3AId" >Id</A >]</TD ><TD CLASS="rdoc" >The <TT ><A HREF="Var.html#t%3AId" >Id</A ></TT >s to pattern match the tuple against </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Var.html#t%3AId" >Id</A ></TD ><TD CLASS="rdoc" >The <TT ><A HREF="Var.html#t%3AId" >Id</A ></TT > to select </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Var.html#t%3AId" >Id</A ></TD ><TD CLASS="rdoc" >A variable of the same type as the scrutinee </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" >Scrutinee </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" >Selector expression </TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" ><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 <TT ><A HREF="Var.html#t%3AId" >Id</A ></TT > in the tuple, then the selector is just the identity. </P ><P >If necessary, we pattern match on a "big" tuple. </P ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkTupleCase" ><A NAME="v%3AmkTupleCase" ></A ></A ><B >mkTupleCase</B ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkTupleCase" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: <A HREF="UniqSupply.html#t%3AUniqSupply" >UniqSupply</A ></TD ><TD CLASS="rdoc" >For inventing names of intermediate variables </TD ></TR ><TR ><TD CLASS="arg" >-> [<A HREF="Var.html#t%3AId" >Id</A >]</TD ><TD CLASS="rdoc" >The tuple identifiers to pattern match on </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" >Body of the case </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Var.html#t%3AId" >Id</A ></TD ><TD CLASS="rdoc" >A variable of the same type as the scrutinee </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" >Scrutinee </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" ><P >A generalization of <TT ><A HREF="MkCore.html#v%3AmkTupleSelector" >mkTupleSelector</A ></TT >, 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 ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="8" ><A NAME="8" >Constructing list expressions </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkNilExpr" ><A NAME="v%3AmkNilExpr" ></A ></A ><B >mkNilExpr</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkNilExpr" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Makes a list <TT >[]</TT > for lists of the specified type </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkConsExpr" ><A NAME="v%3AmkConsExpr" ></A ></A ><B >mkConsExpr</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkConsExpr" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Makes a list <TT >(:)</TT > for lists of the specified type </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkListExpr" ><A NAME="v%3AmkListExpr" ></A ></A ><B >mkListExpr</B > :: <A HREF="Type.html#t%3AType" >Type</A > -> [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkListExpr" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="doc" >Make a list containing the given expressions, where the list has the given type </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkFoldrExpr" ><A NAME="v%3AmkFoldrExpr" ></A ></A ><B >mkFoldrExpr</B ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkFoldrExpr" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: <A HREF="HscTypes.html#t%3AMonadThings" >MonadThings</A > m</TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" >=> <A HREF="Type.html#t%3AType" >Type</A ></TD ><TD CLASS="rdoc" >Element type of the list </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Type.html#t%3AType" >Type</A ></TD ><TD CLASS="rdoc" >Fold result type </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" ><A HREF="Cons.html" >Cons</A > function expression for the fold </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" ><A HREF="Nil.html" >Nil</A > expression for the fold </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" >List expression being folded acress </TD ></TR ><TR ><TD CLASS="arg" >-> m <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Make a fully applied <TT ><A HREF="../base-4.2.0.2/Data-List.html#v%3Afoldr" >foldr</A ></TT > expression </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="topdecl" ><TABLE CLASS="declbar" ><TR ><TD CLASS="declname" ><A NAME="v:mkBuildExpr" ><A NAME="v%3AmkBuildExpr" ></A ></A ><B >mkBuildExpr</B ></TD ><TD CLASS="declbut" ><A HREF="src/MkCore.html#mkBuildExpr" >Source</A ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: (<A HREF="HscTypes.html#t%3AMonadThings" >MonadThings</A > m, <A HREF="UniqSupply.html#t%3AMonadUnique" >MonadUnique</A > m)</TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" >=> <A HREF="Type.html#t%3AType" >Type</A ></TD ><TD CLASS="rdoc" >Type of list elements to be built </TD ></TR ><TR ><TD CLASS="arg" >-> (<A HREF="Var.html#t%3AId" >Id</A >, <A HREF="Type.html#t%3AType" >Type</A >) -> (<A HREF="Var.html#t%3AId" >Id</A >, <A HREF="Type.html#t%3AType" >Type</A >) -> m <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" >Function that, given information about the <TT ><A HREF="Var.html#t%3AId" >Id</A ></TT >s of the binders for the build worker function, returns the body of that worker </TD ></TR ><TR ><TD CLASS="arg" >-> m <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Make a build expression applied to a locally-bound worker function </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="botbar" >Produced by <A HREF="http://www.haskell.org/haddock/" >Haddock</A > version 2.6.1</TD ></TR ></TABLE ></BODY ></HTML >