<!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 >VarEnv</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_VarEnv.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" >VarEnv</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" >Var, Id and TyVar environments (maps) </A ></DT ><DD ><DL ><DT ><A HREF="#2" >Manipulating these environments </A ></DT ></DL ></DD ><DT ><A HREF="#3" >The InScopeSet type </A ></DT ><DD ><DL ><DT ><A HREF="#4" >Operations on InScopeSets </A ></DT ></DL ></DD ><DT ><A HREF="#5" >The RnEnv2 type </A ></DT ><DD ><DL ><DT ><A HREF="#6" >Operations on RnEnv2s </A ></DT ></DL ></DD ><DT ><A HREF="#7" >TidyEnv and its operation </A ></DT ></DL ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></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%3AVarEnv" >VarEnv</A > elt = <A HREF="UniqFM.html#t%3AUniqFM" >UniqFM</A > elt</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3AIdEnv" >IdEnv</A > elt = <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > elt</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3ATyVarEnv" >TyVarEnv</A > elt = <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > elt</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AemptyVarEnv" >emptyVarEnv</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AunitVarEnv" >unitVarEnv</A > :: <A HREF="Var.html#t%3AVar" >Var</A > -> a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkVarEnv" >mkVarEnv</A > :: [(<A HREF="Var.html#t%3AVar" >Var</A >, a)] -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AelemVarEnv" >elemVarEnv</A > :: <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > 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%3AvarEnvElts" >varEnvElts</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> [a]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AvarEnvKeys" >varEnvKeys</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> [<A HREF="Unique.html#t%3AUnique" >Unique</A >]</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AextendVarEnv" >extendVarEnv</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Var.html#t%3AVar" >Var</A > -> a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AextendVarEnv_C" >extendVarEnv_C</A > :: (a -> a -> a) -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Var.html#t%3AVar" >Var</A > -> a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AextendVarEnvList" >extendVarEnvList</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> [(<A HREF="Var.html#t%3AVar" >Var</A >, a)] -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AplusVarEnv" >plusVarEnv</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AplusVarEnv_C" >plusVarEnv_C</A > :: (a -> a -> a) -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AdelVarEnvList" >delVarEnvList</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> [<A HREF="Var.html#t%3AVar" >Var</A >] -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AdelVarEnv" >delVarEnv</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AlookupVarEnv" >lookupVarEnv</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AlookupVarEnv_NF" >lookupVarEnv_NF</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Var.html#t%3AVar" >Var</A > -> a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AlookupWithDefaultVarEnv" >lookupWithDefaultVarEnv</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> a -> <A HREF="Var.html#t%3AVar" >Var</A > -> a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmapVarEnv" >mapVarEnv</A > :: (a -> b) -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > b</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AzipVarEnv" >zipVarEnv</A > :: [<A HREF="Var.html#t%3AVar" >Var</A >] -> [a] -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmodifyVarEnv" >modifyVarEnv</A > :: (a -> a) -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmodifyVarEnv_Directly" >modifyVarEnv_Directly</A > :: (a -> a) -> <A HREF="UniqFM.html#t%3AUniqFM" >UniqFM</A > a -> <A HREF="Unique.html#t%3AUnique" >Unique</A > -> <A HREF="UniqFM.html#t%3AUniqFM" >UniqFM</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AisEmptyVarEnv" >isEmptyVarEnv</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > 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%3AfoldVarEnv" >foldVarEnv</A > :: (a -> b -> b) -> b -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> b</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AelemVarEnvByKey" >elemVarEnvByKey</A > :: <A HREF="Unique.html#t%3AUnique" >Unique</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > 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%3AlookupVarEnv_Directly" >lookupVarEnv_Directly</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Unique.html#t%3AUnique" >Unique</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AfilterVarEnv_Directly" >filterVarEnv_Directly</A > :: (<A HREF="Unique.html#t%3AUnique" >Unique</A > -> a -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ArestrictVarEnv" >restrictVarEnv</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3AInScopeSet" >InScopeSet</A > </TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AemptyInScopeSet" >emptyInScopeSet</A > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkInScopeSet" >mkInScopeSet</A > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AdelInScopeSet" >delInScopeSet</A > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AextendInScopeSet" >extendInScopeSet</A > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AextendInScopeSetList" >extendInScopeSetList</A > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> [<A HREF="Var.html#t%3AVar" >Var</A >] -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AextendInScopeSetSet" >extendInScopeSetSet</A > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AgetInScopeVars" >getInScopeVars</A > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > <A HREF="Var.html#t%3AVar" >Var</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AlookupInScope" >lookupInScope</A > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Var.html#t%3AVar" >Var</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AelemInScopeSet" >elemInScopeSet</A > :: <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</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%3AuniqAway" >uniqAway</A > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="Var.html#t%3AVar" >Var</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A HREF="#t%3ARnEnv2" >RnEnv2</A > </TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AmkRnEnv2" >mkRnEnv2</A > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ArnBndr2" >rnBndr2</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ArnBndrs2" >rnBndrs2</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> [<A HREF="Var.html#t%3AVar" >Var</A >] -> [<A HREF="Var.html#t%3AVar" >Var</A >] -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ArnOccL" >rnOccL</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="Var.html#t%3AVar" >Var</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ArnOccR" >rnOccR</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="Var.html#t%3AVar" >Var</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AinRnEnvL" >inRnEnvL</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</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%3AinRnEnvR" >inRnEnvR</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</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%3ArnBndrL" >rnBndrL</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> (<A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A >, <A HREF="Var.html#t%3AVar" >Var</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ArnBndrR" >rnBndrR</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> (<A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A >, <A HREF="Var.html#t%3AVar" >Var</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AnukeRnEnvL" >nukeRnEnvL</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AnukeRnEnvR" >nukeRnEnvR</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AextendRnInScopeList" >extendRnInScopeList</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> [<A HREF="Var.html#t%3AVar" >Var</A >] -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3ArnInScope" >rnInScope</A > :: <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</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%3ArnInScopeSet" >rnInScopeSet</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AlookupRnInScope" >lookupRnInScope</A > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="Var.html#t%3AVar" >Var</A ></TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A HREF="#t%3ATidyEnv" >TidyEnv</A > = (<A HREF="OccName.html#t%3ATidyOccEnv" >TidyOccEnv</A >, <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > <A HREF="Var.html#t%3AVar" >Var</A >)</TD ></TR ><TR ><TD CLASS="s8" ></TD ></TR ><TR ><TD CLASS="decl" ><A HREF="#v%3AemptyTidyEnv" >emptyTidyEnv</A > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</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" >Var, Id and TyVar environments (maps) </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:VarEnv" ><A NAME="t%3AVarEnv" ></A ></A ><B >VarEnv</B > elt = <A HREF="UniqFM.html#t%3AUniqFM" >UniqFM</A > elt</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:IdEnv" ><A NAME="t%3AIdEnv" ></A ></A ><B >IdEnv</B > elt = <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > elt</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:TyVarEnv" ><A NAME="t%3ATyVarEnv" ></A ></A ><B >TyVarEnv</B > elt = <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > elt</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="2" ><A NAME="2" >Manipulating these environments </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:emptyVarEnv" ><A NAME="v%3AemptyVarEnv" ></A ></A ><B >emptyVarEnv</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:unitVarEnv" ><A NAME="v%3AunitVarEnv" ></A ></A ><B >unitVarEnv</B > :: <A HREF="Var.html#t%3AVar" >Var</A > -> a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkVarEnv" ><A NAME="v%3AmkVarEnv" ></A ></A ><B >mkVarEnv</B > :: [(<A HREF="Var.html#t%3AVar" >Var</A >, a)] -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:elemVarEnv" ><A NAME="v%3AelemVarEnv" ></A ></A ><B >elemVarEnv</B > :: <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:varEnvElts" ><A NAME="v%3AvarEnvElts" ></A ></A ><B >varEnvElts</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> [a]</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:varEnvKeys" ><A NAME="v%3AvarEnvKeys" ></A ></A ><B >varEnvKeys</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> [<A HREF="Unique.html#t%3AUnique" >Unique</A >]</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:extendVarEnv" ><A NAME="v%3AextendVarEnv" ></A ></A ><B >extendVarEnv</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Var.html#t%3AVar" >Var</A > -> a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:extendVarEnv_C" ><A NAME="v%3AextendVarEnv_C" ></A ></A ><B >extendVarEnv_C</B > :: (a -> a -> a) -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Var.html#t%3AVar" >Var</A > -> a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:extendVarEnvList" ><A NAME="v%3AextendVarEnvList" ></A ></A ><B >extendVarEnvList</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> [(<A HREF="Var.html#t%3AVar" >Var</A >, a)] -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:plusVarEnv" ><A NAME="v%3AplusVarEnv" ></A ></A ><B >plusVarEnv</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:plusVarEnv_C" ><A NAME="v%3AplusVarEnv_C" ></A ></A ><B >plusVarEnv_C</B > :: (a -> a -> a) -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:delVarEnvList" ><A NAME="v%3AdelVarEnvList" ></A ></A ><B >delVarEnvList</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> [<A HREF="Var.html#t%3AVar" >Var</A >] -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:delVarEnv" ><A NAME="v%3AdelVarEnv" ></A ></A ><B >delVarEnv</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:lookupVarEnv" ><A NAME="v%3AlookupVarEnv" ></A ></A ><B >lookupVarEnv</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:lookupVarEnv_NF" ><A NAME="v%3AlookupVarEnv_NF" ></A ></A ><B >lookupVarEnv_NF</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Var.html#t%3AVar" >Var</A > -> a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:lookupWithDefaultVarEnv" ><A NAME="v%3AlookupWithDefaultVarEnv" ></A ></A ><B >lookupWithDefaultVarEnv</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> a -> <A HREF="Var.html#t%3AVar" >Var</A > -> a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mapVarEnv" ><A NAME="v%3AmapVarEnv" ></A ></A ><B >mapVarEnv</B > :: (a -> b) -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > b</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:zipVarEnv" ><A NAME="v%3AzipVarEnv" ></A ></A ><B >zipVarEnv</B > :: [<A HREF="Var.html#t%3AVar" >Var</A >] -> [a] -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:modifyVarEnv" ><A NAME="v%3AmodifyVarEnv" ></A ></A ><B >modifyVarEnv</B > :: (a -> a) -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:modifyVarEnv_Directly" ><A NAME="v%3AmodifyVarEnv_Directly" ></A ></A ><B >modifyVarEnv_Directly</B > :: (a -> a) -> <A HREF="UniqFM.html#t%3AUniqFM" >UniqFM</A > a -> <A HREF="Unique.html#t%3AUnique" >Unique</A > -> <A HREF="UniqFM.html#t%3AUniqFM" >UniqFM</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:isEmptyVarEnv" ><A NAME="v%3AisEmptyVarEnv" ></A ></A ><B >isEmptyVarEnv</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:foldVarEnv" ><A NAME="v%3AfoldVarEnv" ></A ></A ><B >foldVarEnv</B > :: (a -> b -> b) -> b -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> b</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:elemVarEnvByKey" ><A NAME="v%3AelemVarEnvByKey" ></A ></A ><B >elemVarEnvByKey</B > :: <A HREF="Unique.html#t%3AUnique" >Unique</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:lookupVarEnv_Directly" ><A NAME="v%3AlookupVarEnv_Directly" ></A ></A ><B >lookupVarEnv_Directly</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="Unique.html#t%3AUnique" >Unique</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:filterVarEnv_Directly" ><A NAME="v%3AfilterVarEnv_Directly" ></A ></A ><B >filterVarEnv_Directly</B > :: (<A HREF="Unique.html#t%3AUnique" >Unique</A > -> a -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A >) -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:restrictVarEnv" ><A NAME="v%3ArestrictVarEnv" ></A ></A ><B >restrictVarEnv</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a -> <A HREF="VarSet.html#t%3AVarSet" >VarSet</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > a</TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="3" ><A NAME="3" >The InScopeSet type </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:InScopeSet" ><A NAME="t%3AInScopeSet" ></A ></A ><B >InScopeSet</B > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" >A set of variables that are in scope at some point </TD ></TR ><TR ><TD CLASS="section4" ><IMG SRC="minus.gif" CLASS="coll" ONCLICK="toggle(this,'i:InScopeSet')" ALT="show/hide" > Instances</TD ></TR ><TR ><TD CLASS="body" ><DIV ID="i:InScopeSet" STYLE="display:block;" ><TABLE CLASS="vanilla" CELLSPACING="1" CELLPADDING="0" ><TR ><TD CLASS="decl" ><A HREF="Outputable.html#t%3AOutputable" >Outputable</A > <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ></TABLE ></DIV ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="4" ><A NAME="4" >Operations on InScopeSets </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:emptyInScopeSet" ><A NAME="v%3AemptyInScopeSet" ></A ></A ><B >emptyInScopeSet</B > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkInScopeSet" ><A NAME="v%3AmkInScopeSet" ></A ></A ><B >mkInScopeSet</B > :: <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:delInScopeSet" ><A NAME="v%3AdelInScopeSet" ></A ></A ><B >delInScopeSet</B > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:extendInScopeSet" ><A NAME="v%3AextendInScopeSet" ></A ></A ><B >extendInScopeSet</B > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:extendInScopeSetList" ><A NAME="v%3AextendInScopeSetList" ></A ></A ><B >extendInScopeSetList</B > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> [<A HREF="Var.html#t%3AVar" >Var</A >] -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:extendInScopeSetSet" ><A NAME="v%3AextendInScopeSetSet" ></A ></A ><B >extendInScopeSetSet</B > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:getInScopeVars" ><A NAME="v%3AgetInScopeVars" ></A ></A ><B >getInScopeVars</B > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > <A HREF="Var.html#t%3AVar" >Var</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:lookupInScope" ><A NAME="v%3AlookupInScope" ></A ></A ><B >lookupInScope</B > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="../base-4.2.0.2/Data-Maybe.html#t%3AMaybe" >Maybe</A > <A HREF="Var.html#t%3AVar" >Var</A ></TD ></TR ><TR ><TD CLASS="doc" >Look up a variable the <TT ><A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TT >. This lets you map from the variable's identity (unique) to its full value. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:elemInScopeSet" ><A NAME="v%3AelemInScopeSet" ></A ></A ><B >elemInScopeSet</B > :: <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:uniqAway" ><A NAME="v%3AuniqAway" ></A ></A ><B >uniqAway</B > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="Var.html#t%3AVar" >Var</A ></TD ></TR ><TR ><TD CLASS="doc" ><TT >uniqAway in_scope v</TT > finds a unique that is not used in the in-scope set, and gives that to v. </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="5" ><A NAME="5" >The RnEnv2 type </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >data</SPAN > <A NAME="t:RnEnv2" ><A NAME="t%3ARnEnv2" ></A ></A ><B >RnEnv2</B > </TD ></TR ><TR ><TD CLASS="body" ><TABLE CLASS="vanilla" CELLSPACING="0" CELLPADDING="0" ><TR ><TD CLASS="ndoc" ><P >When we are comparing (or matching) types or terms, we are faced with "going under" corresponding binders. E.g. when comparing: </P ><PRE > \x. e1 ~ \y. e2 </PRE ><P >Basically we want to rename [<TT >x</TT > -> <TT >y</TT >] or [<TT >y</TT > -> <TT >x</TT >], but there are lots of things we must be careful of. In particular, <TT >x</TT > might be free in <TT >e2</TT >, or y in <TT >e1</TT >. So the idea is that we come up with a fresh binder that is free in neither, and rename <TT >x</TT > and <TT >y</TT > respectively. That means we must maintain: </P ><P >1. A renaming for the left-hand expression </P ><P >2. A renaming for the right-hand expressions </P ><P >3. An in-scope set </P ><P >Furthermore, when matching, we want to be able to have an 'occurs check', to prevent: </P ><PRE > \x. f ~ \y. y </PRE ><P >matching with [<TT >f</TT > -> <TT >y</TT >]. So for each expression we want to know that set of locally-bound variables. That is precisely the domain of the mappings 1. and 2., but we must ensure that we always extend the mappings as we go in. </P ><P >All of this information is bundled up in the <TT ><A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TT > </P ></TD ></TR ></TABLE ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section2" ><A NAME="6" ><A NAME="6" >Operations on RnEnv2s </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:mkRnEnv2" ><A NAME="v%3AmkRnEnv2" ></A ></A ><B >mkRnEnv2</B > :: <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A > -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:rnBndr2" ><A NAME="v%3ArnBndr2" ></A ></A ><B >rnBndr2</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TD ></TR ><TR ><TD CLASS="doc" ><TT >rnBndr2 env bL bR</TT > goes under a binder <TT >bL</TT > in the Left term, and binder <TT >bR</TT > in the Right term. It finds a new binder, <TT >new_b</TT >, and returns an environment mapping <TT >bL -> new_b</TT > and <TT >bR -> new_b</TT > </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:rnBndrs2" ><A NAME="v%3ArnBndrs2" ></A ></A ><B >rnBndrs2</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> [<A HREF="Var.html#t%3AVar" >Var</A >] -> [<A HREF="Var.html#t%3AVar" >Var</A >] -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TD ></TR ><TR ><TD CLASS="doc" >Applies <TT ><A HREF="VarEnv.html#v%3ArnBndr2" >rnBndr2</A ></TT > to several variables: the two variable lists must be of equal length </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:rnOccL" ><A NAME="v%3ArnOccL" ></A ></A ><B >rnOccL</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="Var.html#t%3AVar" >Var</A ></TD ></TR ><TR ><TD CLASS="doc" >Look up the renaming of an occurrence in the left or right term </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:rnOccR" ><A NAME="v%3ArnOccR" ></A ></A ><B >rnOccR</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="Var.html#t%3AVar" >Var</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:inRnEnvL" ><A NAME="v%3AinRnEnvL" ></A ></A ><B >inRnEnvL</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</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="doc" >Tells whether a variable is locally bound </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:inRnEnvR" ><A NAME="v%3AinRnEnvR" ></A ></A ><B >inRnEnvR</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</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="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:rnBndrL" ><A NAME="v%3ArnBndrL" ></A ></A ><B >rnBndrL</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> (<A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A >, <A HREF="Var.html#t%3AVar" >Var</A >)</TD ></TR ><TR ><TD CLASS="doc" >Similar to <TT ><A HREF="VarEnv.html#v%3ArnBndr2" >rnBndr2</A ></TT > but used when there's a binder on the left side only. Useful when eta-expanding </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:rnBndrR" ><A NAME="v%3ArnBndrR" ></A ></A ><B >rnBndrR</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> (<A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A >, <A HREF="Var.html#t%3AVar" >Var</A >)</TD ></TR ><TR ><TD CLASS="doc" >Similar to <TT ><A HREF="VarEnv.html#v%3ArnBndr2" >rnBndr2</A ></TT > but used when there's a binder on the right side only. Useful when eta-expanding </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:nukeRnEnvL" ><A NAME="v%3AnukeRnEnvL" ></A ></A ><B >nukeRnEnvL</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TD ></TR ><TR ><TD CLASS="doc" >Wipe the left or right side renaming </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:nukeRnEnvR" ><A NAME="v%3AnukeRnEnvR" ></A ></A ><B >nukeRnEnvR</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:extendRnInScopeList" ><A NAME="v%3AextendRnInScopeList" ></A ></A ><B >extendRnInScopeList</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> [<A HREF="Var.html#t%3AVar" >Var</A >] -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:rnInScope" ><A NAME="v%3ArnInScope" ></A ></A ><B >rnInScope</B > :: <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="../base-4.2.0.2/Data-Bool.html#t%3ABool" >Bool</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:rnInScopeSet" ><A NAME="v%3ArnInScopeSet" ></A ></A ><B >rnInScopeSet</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="VarEnv.html#t%3AInScopeSet" >InScopeSet</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:lookupRnInScope" ><A NAME="v%3AlookupRnInScope" ></A ></A ><B >lookupRnInScope</B > :: <A HREF="VarEnv.html#t%3ARnEnv2" >RnEnv2</A > -> <A HREF="Var.html#t%3AVar" >Var</A > -> <A HREF="Var.html#t%3AVar" >Var</A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="section1" ><A NAME="7" ><A NAME="7" >TidyEnv and its operation </A ></A ></TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><SPAN CLASS="keyword" >type</SPAN > <A NAME="t:TidyEnv" ><A NAME="t%3ATidyEnv" ></A ></A ><B >TidyEnv</B > = (<A HREF="OccName.html#t%3ATidyOccEnv" >TidyOccEnv</A >, <A HREF="VarEnv.html#t%3AVarEnv" >VarEnv</A > <A HREF="Var.html#t%3AVar" >Var</A >)</TD ></TR ><TR ><TD CLASS="doc" >When tidying up print names, we keep a mapping of in-scope occ-names (the <TT ><A HREF="OccName.html#t%3ATidyOccEnv" >TidyOccEnv</A ></TT >) and a Var-to-Var of the current renamings </TD ></TR ><TR ><TD CLASS="s15" ></TD ></TR ><TR ><TD CLASS="decl" ><A NAME="v:emptyTidyEnv" ><A NAME="v%3AemptyTidyEnv" ></A ></A ><B >emptyTidyEnv</B > :: <A HREF="VarEnv.html#t%3ATidyEnv" >TidyEnv</A ></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 >