<!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 >Rules</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_Rules.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="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" >Rules</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" >RuleBase </A ></DT ><DD ><DL ><DT ><A HREF="#2" >Constructing </A ></DT ><DT ><A HREF="#3" >Checking rule applications </A ></DT ><DT ><A HREF="#4" >Manipulating <TT ><A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A ></TT > rules </A ></DT ></DL ></DD ><DT ><A HREF="#5" >Misc. CoreRule helpers </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" >Functions for collecting together and applying rewrite rules to a module. The <TT ><A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A ></TT > datatype itself is declared elsewhere. </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" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3ARuleBase" >RuleBase</A > = <A HREF="NameEnv.html#t%3ANameEnv" >NameEnv</A > [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AemptyRuleBase" >emptyRuleBase</A > :: <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkRuleBase" >mkRuleBase</A > :: [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AextendRuleBaseList" >extendRuleBaseList</A > :: <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A > -> [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AunionRuleBase" >unionRuleBase</A > :: <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A > -> <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A > -> <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprRuleBase" >pprRuleBase</A > :: <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AruleCheckProgram" >ruleCheckProgram</A > :: (<A HREF="BasicTypes.html#t%3AActivation" >Activation</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> <A HREF="../base-4.2.0.2/Data-Char.html#t%3AString" >String</A > -> <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A > -> [<A HREF="CoreSyn.html#t%3ACoreBind" >CoreBind</A >] -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkSpecInfo" >mkSpecInfo</A > :: [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AextendSpecInfo" >extendSpecInfo</A > :: <A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A > -> [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AaddSpecInfo" >addSpecInfo</A > :: <A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A > -> <A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A > -> <A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AaddIdSpecialisations" >addIdSpecialisations</A > :: <A HREF="Var.html#t%3AId" >Id</A > -> [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="Var.html#t%3AId" >Id</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ArulesOfBinds" >rulesOfBinds</A > :: [<A HREF="CoreSyn.html#t%3ACoreBind" >CoreBind</A >] -> [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgetRules" >getRules</A > :: <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A > -> <A HREF="Var.html#t%3AId" >Id</A > -> [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ApprRulesForUser" >pprRulesForUser</A > :: [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AlookupRule" >lookupRule</A > :: (<A HREF="BasicTypes.html#t%3AActivation" >Activation</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Var.html#t%3AId" >Id</A > -> [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > (<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >, <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkLocalRule" >mkLocalRule</A > :: <A HREF="BasicTypes.html#t%3ARuleName" >RuleName</A > -> <A HREF="BasicTypes.html#t%3AActivation" >Activation</A > -> <A HREF="Name.html#t%3AName" >Name</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 > -> <A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AroughTopNames" >roughTopNames</A > :: [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> [<A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Name.html#t%3AName" >Name</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" >RuleBase </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:RuleBase" ><A NAME="t%3ARuleBase" ></A ></A ><B >RuleBase</B > = <A HREF="NameEnv.html#t%3ANameEnv" >NameEnv</A > [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >]</TD ></TR ><TR ><TD CLASS="doc" >Gathers a collection of <TT ><A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A ></TT >s. Maps (the name of) an <TT ><A HREF="Var.html#t%3AId" >Id</A ></TT > to its rules </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="2" ><A NAME="2" >Constructing </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:emptyRuleBase" ><A NAME="v%3AemptyRuleBase" ></A ></A ><B >emptyRuleBase</B > :: <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkRuleBase" ><A NAME="v%3AmkRuleBase" ></A ></A ><B >mkRuleBase</B > :: [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:extendRuleBaseList" ><A NAME="v%3AextendRuleBaseList" ></A ></A ><B >extendRuleBaseList</B > :: <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A > -> [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:unionRuleBase" ><A NAME="v%3AunionRuleBase" ></A ></A ><B >unionRuleBase</B > :: <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A > -> <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A > -> <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprRuleBase" ><A NAME="v%3ApprRuleBase" ></A ></A ><B >pprRuleBase</B > :: <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A > -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="3" ><A NAME="3" >Checking rule applications </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:ruleCheckProgram" ><A NAME="v%3AruleCheckProgram" ></A ></A ><B >ruleCheckProgram</B ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: <A HREF="BasicTypes.html#t%3AActivation" >Activation</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ><TD CLASS="rdoc" >Rule activation test </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="../base-4.2.0.2/Data-Char.html#t%3AString" >String</A ></TD ><TD CLASS="rdoc" >Rule pattern </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A ></TD ><TD CLASS="rdoc" >Database of rules </TD ></TR ><TR ><TD CLASS="arg" >-> [<A HREF="CoreSyn.html#t%3ACoreBind" >CoreBind</A >]</TD ><TD CLASS="rdoc" >Bindings to check in </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ><TD CLASS="rdoc" >Resulting check message </TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Report partial matches for rules beginning with the specified string for the purposes of error reporting </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="4" ><A NAME="4" >Manipulating <TT ><A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A ></TT > rules </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkSpecInfo" ><A NAME="v%3AmkSpecInfo" ></A ></A ><B >mkSpecInfo</B > :: [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A ></TD ></TR ><TR ><TD CLASS="doc" >Make a <TT ><A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A ></TT > containing a number of <TT ><A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A ></TT >s, suitable for putting into an IdInfo </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:extendSpecInfo" ><A NAME="v%3AextendSpecInfo" ></A ></A ><B >extendSpecInfo</B > :: <A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A > -> [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:addSpecInfo" ><A NAME="v%3AaddSpecInfo" ></A ></A ><B >addSpecInfo</B > :: <A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A > -> <A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A > -> <A HREF="IdInfo.html#t%3ASpecInfo" >SpecInfo</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:addIdSpecialisations" ><A NAME="v%3AaddIdSpecialisations" ></A ></A ><B >addIdSpecialisations</B > :: <A HREF="Var.html#t%3AId" >Id</A > -> [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="Var.html#t%3AId" >Id</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="5" ><A NAME="5" >Misc. CoreRule helpers </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:rulesOfBinds" ><A NAME="v%3ArulesOfBinds" ></A ></A ><B >rulesOfBinds</B > :: [<A HREF="CoreSyn.html#t%3ACoreBind" >CoreBind</A >] -> [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >]</TD ></TR ><TR ><TD CLASS="doc" >Gather all the rules for locally bound identifiers from the supplied bindings </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:getRules" ><A NAME="v%3AgetRules" ></A ></A ><B >getRules</B > :: <A HREF="Rules.html#t%3ARuleBase" >RuleBase</A > -> <A HREF="Var.html#t%3AId" >Id</A > -> [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >]</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:pprRulesForUser" ><A NAME="v%3ApprRulesForUser" ></A ></A ><B >pprRulesForUser</B > :: [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="Outputable.html#t%3ASDoc" >SDoc</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:lookupRule" ><A NAME="v%3AlookupRule" ></A ></A ><B >lookupRule</B > :: (<A HREF="BasicTypes.html#t%3AActivation" >Activation</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Var.html#t%3AId" >Id</A > -> [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > (<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >, <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >)</TD ></TR ><TR ><TD CLASS="doc" >The main rule matching function. Attempts to apply all (active) supplied rules to this instance of an application in a given context, returning the rule applied and the resulting expression if successful. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkLocalRule" ><A NAME="v%3AmkLocalRule" ></A ></A ><B >mkLocalRule</B > :: <A HREF="BasicTypes.html#t%3ARuleName" >RuleName</A > -> <A HREF="BasicTypes.html#t%3AActivation" >Activation</A > -> <A HREF="Name.html#t%3AName" >Name</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 > -> <A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A ></TD ></TR ><TR ><TD CLASS="doc" >Used to make <TT ><A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A ></TT > for an <TT ><A HREF="Var.html#t%3AId" >Id</A ></TT > defined in the module being compiled. See also <TT ><A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A ></TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:roughTopNames" ><A NAME="v%3AroughTopNames" ></A ></A ><B >roughTopNames</B > :: [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> [<A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Name.html#t%3AName" >Name</A >]</TD ></TR ><TR ><TD CLASS="doc" ><P >Find the "top" free names of several expressions. Such names are either: </P ><P >1. The function finally being applied to in an application chain (if that name is a GlobalId: see <A HREF="Var.html#globalvslocal" >Var</A >), or </P ><P >2. The TyCon if the expression is a <TT ><A HREF="Type.html#t%3AType" >Type</A ></TT > </P ><P >This is used for the fast-match-check for rules; if the top names don't match, the rest can't </P ></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 >