<!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 >CoreFVs</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_CoreFVs.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" >CoreFVs</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" >Free variables of expressions and binding groups </A ></DT ><DT ><A HREF="#2" >Selective free variables of expressions </A ></DT ><DT ><A HREF="#3" >Free variables of Rules, Vars and Ids </A ></DT ><DT ><A HREF="#4" >Core syntax tree annotation with free variables </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" >A module concerned with finding the free variables of an expression. </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%3AexprFreeVars" >exprFreeVars</A > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AexprsFreeVars" >exprsFreeVars</A > :: [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AbindFreeVars" >bindFreeVars</A > :: <A HREF="CoreSyn.html#t%3ACoreBind" >CoreBind</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3AInterestingVarFun" >InterestingVarFun</A > = <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AexprSomeFreeVars" >exprSomeFreeVars</A > :: <A HREF="CoreFVs.html#t%3AInterestingVarFun" >InterestingVarFun</A > -> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AexprsSomeFreeVars" >exprsSomeFreeVars</A > :: <A HREF="CoreFVs.html#t%3AInterestingVarFun" >InterestingVarFun</A > -> [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AexprFreeNames" >exprFreeNames</A > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="NameSet.html#t%3ANameSet" >NameSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AexprsFreeNames" >exprsFreeNames</A > :: [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="NameSet.html#t%3ANameSet" >NameSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AidRuleVars" >idRuleVars</A > :: <A HREF="Var.html#t%3AId" >Id</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AidFreeVars" >idFreeVars</A > :: <A HREF="Var.html#t%3AId" >Id</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AvarTypeTyVars" >varTypeTyVars</A > :: <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AvarTypeTcTyVars" >varTypeTcTyVars</A > :: <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AruleRhsFreeVars" >ruleRhsFreeVars</A > :: <A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ArulesFreeVars" >rulesFreeVars</A > :: [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AruleLhsFreeNames" >ruleLhsFreeNames</A > :: <A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A > -> <A HREF="NameSet.html#t%3ANameSet" >NameSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AruleLhsFreeIds" >ruleLhsFreeIds</A > :: <A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3ACoreExprWithFVs" >CoreExprWithFVs</A > = <A HREF="CoreSyn.html#t%3AAnnExpr" >AnnExpr</A > <A HREF="Var.html#t%3AId" >Id</A > <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3ACoreBindWithFVs" >CoreBindWithFVs</A > = <A HREF="CoreSyn.html#t%3AAnnBind" >AnnBind</A > <A HREF="Var.html#t%3AId" >Id</A > <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AfreeVars" >freeVars</A > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreFVs.html#t%3ACoreExprWithFVs" >CoreExprWithFVs</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AfreeVarsOf" >freeVarsOf</A > :: <A HREF="CoreFVs.html#t%3ACoreExprWithFVs" >CoreExprWithFVs</A > -> <A HREF="VarSet.html#t%3AIdSet" >IdSet</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" >Free variables of expressions and binding groups </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:exprFreeVars" ><A NAME="v%3AexprFreeVars" ></A ></A ><B >exprFreeVars</B > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="doc" >Find all locally-defined free Ids or type variables in an expression </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:exprsFreeVars" ><A NAME="v%3AexprsFreeVars" ></A ></A ><B >exprsFreeVars</B > :: [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="doc" >Find all locally-defined free Ids or type variables in several expressions </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:bindFreeVars" ><A NAME="v%3AbindFreeVars" ></A ></A ><B >bindFreeVars</B > :: <A HREF="CoreSyn.html#t%3ACoreBind" >CoreBind</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="doc" >Find all locally defined free Ids in a binding group </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="2" ><A NAME="2" >Selective free variables of expressions </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:InterestingVarFun" ><A NAME="t%3AInterestingVarFun" ></A ></A ><B >InterestingVarFun</B > = <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="doc" >Predicate on possible free variables: returns <TT >True</TT > iff the variable is interesting </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:exprSomeFreeVars" ><A NAME="v%3AexprSomeFreeVars" ></A ></A ><B >exprSomeFreeVars</B ></TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="arg" >:: <A HREF="CoreFVs.html#t%3AInterestingVarFun" >InterestingVarFun</A ></TD ><TD CLASS="rdoc" >Says which <TT ><A HREF="Var.html#t%3AVar" >Var</A ></TT >s are interesting </TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="arg" >-> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ><TD CLASS="rdoc" ></TD ></TR ><TR ><TD CLASS="ndoc" COLSPAN="2" >Finds free variables in an expression selected by a predicate </TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:exprsSomeFreeVars" ><A NAME="v%3AexprsSomeFreeVars" ></A ></A ><B >exprsSomeFreeVars</B > :: <A HREF="CoreFVs.html#t%3AInterestingVarFun" >InterestingVarFun</A > -> [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="doc" >Finds free variables in several expressions selected by a predicate </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:exprFreeNames" ><A NAME="v%3AexprFreeNames" ></A ></A ><B >exprFreeNames</B > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="NameSet.html#t%3ANameSet" >NameSet</A ></TD ></TR ><TR ><TD CLASS="doc" >Finds the free <EM >external</EM > names of an expression, notably including the names of type constructors (which of course do not show up in <TT ><A HREF="CoreFVs.html#v%3AexprFreeVars" >exprFreeVars</A ></TT >). </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:exprsFreeNames" ><A NAME="v%3AexprsFreeNames" ></A ></A ><B >exprsFreeNames</B > :: [<A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A >] -> <A HREF="NameSet.html#t%3ANameSet" >NameSet</A ></TD ></TR ><TR ><TD CLASS="doc" >Finds the free <EM >external</EM > names of several expressions: see <TT ><A HREF="CoreFVs.html#v%3AexprFreeNames" >exprFreeNames</A ></TT > for details </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="3" ><A NAME="3" >Free variables of Rules, Vars and Ids </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:idRuleVars" ><A NAME="v%3AidRuleVars" ></A ></A ><B >idRuleVars</B > :: <A HREF="Var.html#t%3AId" >Id</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:idFreeVars" ><A NAME="v%3AidFreeVars" ></A ></A ><B >idFreeVars</B > :: <A HREF="Var.html#t%3AId" >Id</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:varTypeTyVars" ><A NAME="v%3AvarTypeTyVars" ></A ></A ><B >varTypeTyVars</B > :: <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:varTypeTcTyVars" ><A NAME="v%3AvarTypeTcTyVars" ></A ></A ><B >varTypeTcTyVars</B > :: <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarSet.html#t%3ATyVarSet" >TyVarSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:ruleRhsFreeVars" ><A NAME="v%3AruleRhsFreeVars" ></A ></A ><B >ruleRhsFreeVars</B > :: <A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="doc" >Those variables free in the right hand side of a rule </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:rulesFreeVars" ><A NAME="v%3ArulesFreeVars" ></A ></A ><B >rulesFreeVars</B > :: [<A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A >] -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="doc" >Those variables free in the right hand side of several rules </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:ruleLhsFreeNames" ><A NAME="v%3AruleLhsFreeNames" ></A ></A ><B >ruleLhsFreeNames</B > :: <A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A > -> <A HREF="NameSet.html#t%3ANameSet" >NameSet</A ></TD ></TR ><TR ><TD CLASS="doc" ><P >Similar to <TT ><A HREF="CoreFVs.html#v%3AexprFreeNames" >exprFreeNames</A ></TT >. However, this is used when deciding whether a rule is an orphan. In particular, suppose that T is defined in this module; we want to avoid declaring that a rule like: </P ><PRE > fromIntegral T = fromIntegral_T </PRE ><P >is an orphan. Of course it isn't, and declaring it an orphan would make the whole module an orphan module, which is bad. </P ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:ruleLhsFreeIds" ><A NAME="v%3AruleLhsFreeIds" ></A ></A ><B >ruleLhsFreeIds</B > :: <A HREF="CoreSyn.html#t%3ACoreRule" >CoreRule</A > -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="doc" >This finds all locally-defined free Ids on the left hand side of a rule </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="4" ><A NAME="4" >Core syntax tree annotation with free variables </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:CoreExprWithFVs" ><A NAME="t%3ACoreExprWithFVs" ></A ></A ><B >CoreExprWithFVs</B > = <A HREF="CoreSyn.html#t%3AAnnExpr" >AnnExpr</A > <A HREF="Var.html#t%3AId" >Id</A > <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="doc" >Every node in an expression annotated with its (non-global) free variables, both Ids and TyVars </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:CoreBindWithFVs" ><A NAME="t%3ACoreBindWithFVs" ></A ></A ><B >CoreBindWithFVs</B > = <A HREF="CoreSyn.html#t%3AAnnBind" >AnnBind</A > <A HREF="Var.html#t%3AId" >Id</A > <A HREF="VarSet.html#t%3AVarSet" >VarSet</A ></TD ></TR ><TR ><TD CLASS="doc" >Every node in a binding group annotated with its (non-global) free variables, both Ids and TyVars </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:freeVars" ><A NAME="v%3AfreeVars" ></A ></A ><B >freeVars</B > :: <A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A > -> <A HREF="CoreFVs.html#t%3ACoreExprWithFVs" >CoreExprWithFVs</A ></TD ></TR ><TR ><TD CLASS="doc" >Annotate a <TT ><A HREF="CoreSyn.html#t%3ACoreExpr" >CoreExpr</A ></TT > with its (non-global) free type and value variables at every tree node </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:freeVarsOf" ><A NAME="v%3AfreeVarsOf" ></A ></A ><B >freeVarsOf</B > :: <A HREF="CoreFVs.html#t%3ACoreExprWithFVs" >CoreExprWithFVs</A > -> <A HREF="VarSet.html#t%3AIdSet" >IdSet</A ></TD ></TR ><TR ><TD CLASS="doc" >Inverse function to <TT ><A HREF="CoreFVs.html#v%3AfreeVars" >freeVars</A ></TT > </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 >