Sophie

Sophie

distrib > Mageia > 5 > i586 > media > core-release > by-pkgid > 6e204a966e8c42d976f99a1700ce5f20 > files > 2834

ghc-7.4.2-4.mga5.i586.rpm

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"><html xmlns="http://www.w3.org/1999/xhtml"><head><meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /><title>CoreMonad</title><link href="ocean.css" rel="stylesheet" type="text/css" title="Ocean" /><script src="haddock-util.js" type="text/javascript"></script><script type="text/javascript">//<![CDATA[
window.onload = function () {pageLoad();setSynopsis("mini_CoreMonad.html");};
//]]>
</script></head><body><div id="package-header"><ul class="links" id="page-menu"><li><a href="index.html">Contents</a></li><li><a href="doc-index.html">Index</a></li></ul><p class="caption">ghc-7.4.2: The GHC API</p></div><div id="content"><div id="module-header"><table class="info"><tr><th>Safe Haskell</th><td>None</td></tr></table><p class="caption">CoreMonad</p></div><div id="table-of-contents"><p class="caption">Contents</p><ul><li><a href="#g:1">Configuration of the core-to-core passes
</a></li><li><a href="#g:2">Plugins
</a></li><li><a href="#g:3">Counting
</a></li><li><a href="#g:4">The monad
</a><ul><li><a href="#g:5">Reading from the monad
</a></li><li><a href="#g:6">Writing to the monad
</a></li><li><a href="#g:7">Lifting into the monad
</a></li><li><a href="#g:8">Global initialization
</a></li><li><a href="#g:9">Dealing with annotations
</a></li><li><a href="#g:10">Debug output
</a></li><li><a href="#g:11">Screen output
</a></li></ul></li><li><a href="#g:12">Getting <code><a href="Name.html#t:Name">Name</a></code>s
</a></li></ul></div><div id="synopsis"><p id="control.syn" class="caption expander" onclick="toggleSection('syn')">Synopsis</p><ul id="section.syn" class="hide" onclick="toggleSection('syn')"><li class="src short"><span class="keyword">data</span>  <a href="#t:CoreToDo">CoreToDo</a> <ul class="subs"><li>= <a href="#v:CoreDoSimplify">CoreDoSimplify</a> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> <a href="CoreMonad.html#t:SimplifierMode">SimplifierMode</a>  </li><li>| <a href="#v:CoreDoPluginPass">CoreDoPluginPass</a> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> <a href="CoreMonad.html#t:PluginPass">PluginPass</a>  </li><li>| <a href="#v:CoreDoFloatInwards">CoreDoFloatInwards</a>  </li><li>| <a href="#v:CoreDoFloatOutwards">CoreDoFloatOutwards</a> <a href="CoreMonad.html#t:FloatOutSwitches">FloatOutSwitches</a>  </li><li>| <a href="#v:CoreLiberateCase">CoreLiberateCase</a>  </li><li>| <a href="#v:CoreDoPrintCore">CoreDoPrintCore</a>  </li><li>| <a href="#v:CoreDoStaticArgs">CoreDoStaticArgs</a>  </li><li>| <a href="#v:CoreDoStrictness">CoreDoStrictness</a>  </li><li>| <a href="#v:CoreDoWorkerWrapper">CoreDoWorkerWrapper</a>  </li><li>| <a href="#v:CoreDoSpecialising">CoreDoSpecialising</a>  </li><li>| <a href="#v:CoreDoSpecConstr">CoreDoSpecConstr</a>  </li><li>| <a href="#v:CoreCSE">CoreCSE</a>  </li><li>| <a href="#v:CoreDoRuleCheck">CoreDoRuleCheck</a> <a href="BasicTypes.html#t:CompilerPhase">CompilerPhase</a> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a>  </li><li>| <a href="#v:CoreDoVectorisation">CoreDoVectorisation</a>  </li><li>| <a href="#v:CoreDoNothing">CoreDoNothing</a>  </li><li>| <a href="#v:CoreDoPasses">CoreDoPasses</a> [<a href="CoreMonad.html#t:CoreToDo">CoreToDo</a>]  </li><li>| <a href="#v:CoreDesugar">CoreDesugar</a>  </li><li>| <a href="#v:CoreDesugarOpt">CoreDesugarOpt</a>  </li><li>| <a href="#v:CoreTidy">CoreTidy</a>  </li><li>| <a href="#v:CorePrep">CorePrep</a>  </li></ul></li><li class="src short"><a href="#v:runWhen">runWhen</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a> -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a></li><li class="src short"><a href="#v:runMaybe">runMaybe</a> ::  <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -&gt; (a -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a>) -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:SimplifierMode">SimplifierMode</a>  = <a href="#v:SimplMode">SimplMode</a> {<ul class="subs"><li><a href="#v:sm_names">sm_names</a> :: [<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>]</li><li><a href="#v:sm_phase">sm_phase</a> :: <a href="BasicTypes.html#t:CompilerPhase">CompilerPhase</a></li><li><a href="#v:sm_rules">sm_rules</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:sm_inline">sm_inline</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:sm_case_case">sm_case_case</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:sm_eta_expand">sm_eta_expand</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li></ul>}</li><li class="src short"><span class="keyword">data</span>  <a href="#t:FloatOutSwitches">FloatOutSwitches</a>  = <a href="#v:FloatOutSwitches">FloatOutSwitches</a> {<ul class="subs"><li><a href="#v:floatOutLambdas">floatOutLambdas</a> :: <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li><a href="#v:floatOutConstants">floatOutConstants</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li><a href="#v:floatOutPartialApplications">floatOutPartialApplications</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li></ul>}</li><li class="src short"><a href="#v:dumpSimplPhase">dumpSimplPhase</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="CoreMonad.html#t:SimplifierMode">SimplifierMode</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:pprPassDetails">pprPassDetails</a> :: <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><span class="keyword">type</span> <a href="#t:PluginPass">PluginPass</a> = <a href="HscTypes.html#t:ModGuts">ModGuts</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="HscTypes.html#t:ModGuts">ModGuts</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:Plugin">Plugin</a>  = <a href="#v:Plugin">Plugin</a> {<ul class="subs"><li><a href="#v:installCoreToDos">installCoreToDos</a> :: [<a href="CoreMonad.html#t:CommandLineOption">CommandLineOption</a>] -&gt; [<a href="CoreMonad.html#t:CoreToDo">CoreToDo</a>] -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> [<a href="CoreMonad.html#t:CoreToDo">CoreToDo</a>]</li></ul>}</li><li class="src short"><span class="keyword">type</span> <a href="#t:CommandLineOption">CommandLineOption</a> = <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></li><li class="src short"><a href="#v:defaultPlugin">defaultPlugin</a> :: <a href="CoreMonad.html#t:Plugin">Plugin</a></li><li class="src short"><a href="#v:bindsOnlyPass">bindsOnlyPass</a> :: (<a href="CoreSyn.html#t:CoreProgram">CoreProgram</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="CoreSyn.html#t:CoreProgram">CoreProgram</a>) -&gt; <a href="HscTypes.html#t:ModGuts">ModGuts</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="HscTypes.html#t:ModGuts">ModGuts</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:SimplCount">SimplCount</a> </li><li class="src short"><a href="#v:doSimplTick">doSimplTick</a> :: <a href="CoreMonad.html#t:Tick">Tick</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a></li><li class="src short"><a href="#v:doFreeSimplTick">doFreeSimplTick</a> :: <a href="CoreMonad.html#t:Tick">Tick</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a></li><li class="src short"><a href="#v:simplCountN">simplCountN</a> :: <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></li><li class="src short"><a href="#v:pprSimplCount">pprSimplCount</a> :: <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></li><li class="src short"><a href="#v:plusSimplCount">plusSimplCount</a> :: <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a></li><li class="src short"><a href="#v:zeroSimplCount">zeroSimplCount</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a></li><li class="src short"><a href="#v:isZeroSimplCount">isZeroSimplCount</a> :: <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><a href="#v:hasDetailedCounts">hasDetailedCounts</a> :: <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></li><li class="src short"><span class="keyword">data</span>  <a href="#t:Tick">Tick</a> <ul class="subs"><li>= <a href="#v:PreInlineUnconditionally">PreInlineUnconditionally</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:PostInlineUnconditionally">PostInlineUnconditionally</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:UnfoldingDone">UnfoldingDone</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:RuleFired">RuleFired</a> <a href="FastString.html#t:FastString">FastString</a>  </li><li>| <a href="#v:LetFloatFromLet">LetFloatFromLet</a>  </li><li>| <a href="#v:EtaExpansion">EtaExpansion</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:EtaReduction">EtaReduction</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:BetaReduction">BetaReduction</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:CaseOfCase">CaseOfCase</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:KnownBranch">KnownBranch</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:CaseMerge">CaseMerge</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:AltMerge">AltMerge</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:CaseElim">CaseElim</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:CaseIdentity">CaseIdentity</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:FillInCaseDefault">FillInCaseDefault</a> <a href="Var.html#t:Id">Id</a>  </li><li>| <a href="#v:BottomFound">BottomFound</a>  </li><li>| <a href="#v:SimplifierDone">SimplifierDone</a>  </li></ul></li><li class="src short"><span class="keyword">data</span>  <a href="#t:CoreM">CoreM</a> a</li><li class="src short"><a href="#v:runCoreM">runCoreM</a> ::  <a href="HscTypes.html#t:HscEnv">HscEnv</a> -&gt; <a href="Rules.html#t:RuleBase">RuleBase</a> -&gt; <a href="UniqSupply.html#t:UniqSupply">UniqSupply</a> -&gt; <a href="Module.html#t:Module">Module</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> a -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> (a, <a href="CoreMonad.html#t:SimplCount">SimplCount</a>)</li><li class="src short"><a href="#v:getHscEnv">getHscEnv</a> :: <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="HscTypes.html#t:HscEnv">HscEnv</a></li><li class="src short"><a href="#v:getRuleBase">getRuleBase</a> :: <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="Rules.html#t:RuleBase">RuleBase</a></li><li class="src short"><a href="#v:getModule">getModule</a> :: <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="Module.html#t:Module">Module</a></li><li class="src short"><a href="#v:getDynFlags">getDynFlags</a> :: <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="DynFlags.html#t:DynFlags">DynFlags</a></li><li class="src short"><a href="#v:getOrigNameCache">getOrigNameCache</a> :: <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="HscTypes.html#t:OrigNameCache">OrigNameCache</a></li><li class="src short"><a href="#v:addSimplCount">addSimplCount</a> :: <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</li><li class="src short"><a href="#v:liftIO">liftIO</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> a -&gt; m a</li><li class="src short"><a href="#v:liftIOWithCount">liftIOWithCount</a> ::  <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> (<a href="CoreMonad.html#t:SimplCount">SimplCount</a>, a) -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> a</li><li class="src short"><a href="#v:liftIO1">liftIO1</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> b) -&gt; a -&gt; m b</li><li class="src short"><a href="#v:liftIO2">liftIO2</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; b -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> c) -&gt; a -&gt; b -&gt; m c</li><li class="src short"><a href="#v:liftIO3">liftIO3</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; b -&gt; c -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> d) -&gt; a -&gt; b -&gt; c -&gt; m d</li><li class="src short"><a href="#v:liftIO4">liftIO4</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; b -&gt; c -&gt; d -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> e) -&gt; a -&gt; b -&gt; c -&gt; d -&gt; m e</li><li class="src short"><a href="#v:reinitializeGlobals">reinitializeGlobals</a> :: <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</li><li class="src short"><a href="#v:getAnnotations">getAnnotations</a> :: <a href="../base-4.5.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> a =&gt; ([<a href="../base-4.5.1.0/Data-Word.html#t:Word8">Word8</a>] -&gt; a) -&gt; <a href="HscTypes.html#t:ModGuts">ModGuts</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> (<a href="UniqFM.html#t:UniqFM">UniqFM</a> [a])</li><li class="src short"><a href="#v:getFirstAnnotations">getFirstAnnotations</a> :: <a href="../base-4.5.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> a =&gt; ([<a href="../base-4.5.1.0/Data-Word.html#t:Word8">Word8</a>] -&gt; a) -&gt; <a href="HscTypes.html#t:ModGuts">ModGuts</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> (<a href="UniqFM.html#t:UniqFM">UniqFM</a> a)</li><li class="src short"><a href="#v:showPass">showPass</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a> -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:endPass">endPass</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a> -&gt; <a href="CoreSyn.html#t:CoreProgram">CoreProgram</a> -&gt; [<a href="CoreSyn.html#t:CoreRule">CoreRule</a>] -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:dumpPassResult">dumpPassResult</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="DynFlags.html#t:DynFlag">DynFlag</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="CoreSyn.html#t:CoreProgram">CoreProgram</a> -&gt; [<a href="CoreSyn.html#t:CoreRule">CoreRule</a>] -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:lintPassResult">lintPassResult</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a> -&gt; <a href="CoreSyn.html#t:CoreProgram">CoreProgram</a> -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:dumpIfSet">dumpIfSet</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> ()</li><li class="src short"><a href="#v:putMsg">putMsg</a> :: <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</li><li class="src short"><a href="#v:putMsgS">putMsgS</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</li><li class="src short"><a href="#v:errorMsg">errorMsg</a> :: <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</li><li class="src short"><a href="#v:errorMsgS">errorMsgS</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</li><li class="src short"><a href="#v:fatalErrorMsg">fatalErrorMsg</a> :: <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</li><li class="src short"><a href="#v:fatalErrorMsgS">fatalErrorMsgS</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</li><li class="src short"><a href="#v:debugTraceMsg">debugTraceMsg</a> :: <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</li><li class="src short"><a href="#v:debugTraceMsgS">debugTraceMsgS</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</li><li class="src short"><a href="#v:dumpIfSet_dyn">dumpIfSet_dyn</a> :: <a href="DynFlags.html#t:DynFlag">DynFlag</a> -&gt; <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</li><li class="src short"><a href="#v:thNameToGhcName">thNameToGhcName</a> :: <a href="../template-haskell-2.7.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>)</li></ul></div><div id="interface"><h1 id="g:1">Configuration of the core-to-core passes
</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:CoreToDo" class="def">CoreToDo</a>  </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:CoreDoSimplify" class="def">CoreDoSimplify</a> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a> <a href="CoreMonad.html#t:SimplifierMode">SimplifierMode</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoPluginPass" class="def">CoreDoPluginPass</a> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> <a href="CoreMonad.html#t:PluginPass">PluginPass</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoFloatInwards" class="def">CoreDoFloatInwards</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoFloatOutwards" class="def">CoreDoFloatOutwards</a> <a href="CoreMonad.html#t:FloatOutSwitches">FloatOutSwitches</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreLiberateCase" class="def">CoreLiberateCase</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoPrintCore" class="def">CoreDoPrintCore</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoStaticArgs" class="def">CoreDoStaticArgs</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoStrictness" class="def">CoreDoStrictness</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoWorkerWrapper" class="def">CoreDoWorkerWrapper</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoSpecialising" class="def">CoreDoSpecialising</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoSpecConstr" class="def">CoreDoSpecConstr</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreCSE" class="def">CoreCSE</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoRuleCheck" class="def">CoreDoRuleCheck</a> <a href="BasicTypes.html#t:CompilerPhase">CompilerPhase</a> <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoVectorisation" class="def">CoreDoVectorisation</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoNothing" class="def">CoreDoNothing</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDoPasses" class="def">CoreDoPasses</a> [<a href="CoreMonad.html#t:CoreToDo">CoreToDo</a>]</td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDesugar" class="def">CoreDesugar</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreDesugarOpt" class="def">CoreDesugarOpt</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CoreTidy" class="def">CoreTidy</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CorePrep" class="def">CorePrep</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:CoreToDo" class="caption collapser" onclick="toggleSection('i:CoreToDo')">Instances</p><div id="section.i:CoreToDo" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:runWhen" class="def">runWhen</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a> -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a></p></div><div class="top"><p class="src"><a name="v:runMaybe" class="def">runMaybe</a> ::  <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> a -&gt; (a -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a>) -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a></p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:SimplifierMode" class="def">SimplifierMode</a>  </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:SimplMode" class="def">SimplMode</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:sm_names" class="def">sm_names</a> :: [<a href="../base-4.5.1.0/Data-String.html#t:String">String</a>]</dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:sm_phase" class="def">sm_phase</a> :: <a href="BasicTypes.html#t:CompilerPhase">CompilerPhase</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:sm_rules" class="def">sm_rules</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:sm_inline" class="def">sm_inline</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:sm_case_case" class="def">sm_case_case</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd><dt class="src"><a name="v:sm_eta_expand" class="def">sm_eta_expand</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc empty">&nbsp;</dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:SimplifierMode" class="caption collapser" onclick="toggleSection('i:SimplifierMode')">Instances</p><div id="section.i:SimplifierMode" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="CoreMonad.html#t:SimplifierMode">SimplifierMode</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:FloatOutSwitches" class="def">FloatOutSwitches</a>  </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:FloatOutSwitches" class="def">FloatOutSwitches</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:floatOutLambdas" class="def">floatOutLambdas</a> :: <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></dt><dd class="doc"><p>Just n <a href="=">=</a> float lambdas to top level, if
 doing so will abstract over n or fewer 
 value variables
 Nothing <a href="=">=</a> float all lambdas to top level,
             regardless of how many free variables
 Just 0 is the vanilla case: float a lambda
    iff it has no free vars
</p></dd><dt class="src"><a name="v:floatOutConstants" class="def">floatOutConstants</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc"><p>True <a href="=">=</a> float constants to top level,
            even if they do not escape a lambda
</p></dd><dt class="src"><a name="v:floatOutPartialApplications" class="def">floatOutPartialApplications</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></dt><dd class="doc"><p>True <a href="=">=</a> float out partial applications
            based on arity information.
</p></dd></dl><div class="clear"></div></div></td></tr></table></div><div class="subs instances"><p id="control.i:FloatOutSwitches" class="caption collapser" onclick="toggleSection('i:FloatOutSwitches')">Instances</p><div id="section.i:FloatOutSwitches" class="show"><table><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="CoreMonad.html#t:FloatOutSwitches">FloatOutSwitches</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:dumpSimplPhase" class="def">dumpSimplPhase</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="CoreMonad.html#t:SimplifierMode">SimplifierMode</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:pprPassDetails" class="def">pprPassDetails</a> :: <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><h1 id="g:2">Plugins
</h1><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:PluginPass" class="def">PluginPass</a> = <a href="HscTypes.html#t:ModGuts">ModGuts</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="HscTypes.html#t:ModGuts">ModGuts</a></p><div class="doc"><p>A description of the plugin pass itself
</p></div></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Plugin" class="def">Plugin</a>  </p><div class="doc"><p><code><a href="CoreMonad.html#t:Plugin">Plugin</a></code> is the core compiler plugin data type. Try to avoid
 constructing one of these directly, and just modify some fields of
 <code><a href="CoreMonad.html#v:defaultPlugin">defaultPlugin</a></code> instead: this is to try and preserve source-code
 compatability when we add fields to this.
</p><p>Nonetheless, this API is preliminary and highly likely to change in the future.
</p></div><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:Plugin" class="def">Plugin</a></td><td class="doc empty">&nbsp;</td></tr><tr><td colspan="2"><div class="subs fields"><p class="caption">Fields</p><dl><dt class="src"><a name="v:installCoreToDos" class="def">installCoreToDos</a> :: [<a href="CoreMonad.html#t:CommandLineOption">CommandLineOption</a>] -&gt; [<a href="CoreMonad.html#t:CoreToDo">CoreToDo</a>] -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> [<a href="CoreMonad.html#t:CoreToDo">CoreToDo</a>]</dt><dd class="doc"><p>Modify the Core pipeline that will be used for compilation. 
 This is called as the Core pipeline is built for every module
  being compiled, and plugins get the opportunity to modify 
 the pipeline in a nondeterministic order.
</p></dd></dl><div class="clear"></div></div></td></tr></table></div></div><div class="top"><p class="src"><span class="keyword">type</span> <a name="t:CommandLineOption" class="def">CommandLineOption</a> = <a href="../base-4.5.1.0/Data-String.html#t:String">String</a></p><div class="doc"><p>Command line options gathered from the -PModule.Name:stuff syntax are given to you as this type
</p></div></div><div class="top"><p class="src"><a name="v:defaultPlugin" class="def">defaultPlugin</a> :: <a href="CoreMonad.html#t:Plugin">Plugin</a></p><div class="doc"><p>Default plugin: does nothing at all! For compatability reasons you should base all your
 plugin definitions on this default value.
</p></div></div><div class="top"><p class="src"><a name="v:bindsOnlyPass" class="def">bindsOnlyPass</a> :: (<a href="CoreSyn.html#t:CoreProgram">CoreProgram</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="CoreSyn.html#t:CoreProgram">CoreProgram</a>) -&gt; <a href="HscTypes.html#t:ModGuts">ModGuts</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="HscTypes.html#t:ModGuts">ModGuts</a></p></div><h1 id="g:3">Counting
</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:SimplCount" class="def">SimplCount</a>  </p></div><div class="top"><p class="src"><a name="v:doSimplTick" class="def">doSimplTick</a> :: <a href="CoreMonad.html#t:Tick">Tick</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a></p></div><div class="top"><p class="src"><a name="v:doFreeSimplTick" class="def">doFreeSimplTick</a> :: <a href="CoreMonad.html#t:Tick">Tick</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a></p></div><div class="top"><p class="src"><a name="v:simplCountN" class="def">simplCountN</a> :: <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="../base-4.5.1.0/Data-Int.html#t:Int">Int</a></p></div><div class="top"><p class="src"><a name="v:pprSimplCount" class="def">pprSimplCount</a> :: <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a></p></div><div class="top"><p class="src"><a name="v:plusSimplCount" class="def">plusSimplCount</a> :: <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a></p></div><div class="top"><p class="src"><a name="v:zeroSimplCount" class="def">zeroSimplCount</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="CoreMonad.html#t:SimplCount">SimplCount</a></p></div><div class="top"><p class="src"><a name="v:isZeroSimplCount" class="def">isZeroSimplCount</a> :: <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><a name="v:hasDetailedCounts" class="def">hasDetailedCounts</a> :: <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a></p></div><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:Tick" class="def">Tick</a>  </p><div class="subs constructors"><p class="caption">Constructors</p><table><tr><td class="src"><a name="v:PreInlineUnconditionally" class="def">PreInlineUnconditionally</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:PostInlineUnconditionally" class="def">PostInlineUnconditionally</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:UnfoldingDone" class="def">UnfoldingDone</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:RuleFired" class="def">RuleFired</a> <a href="FastString.html#t:FastString">FastString</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:LetFloatFromLet" class="def">LetFloatFromLet</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:EtaExpansion" class="def">EtaExpansion</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:EtaReduction" class="def">EtaReduction</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:BetaReduction" class="def">BetaReduction</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CaseOfCase" class="def">CaseOfCase</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:KnownBranch" class="def">KnownBranch</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CaseMerge" class="def">CaseMerge</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:AltMerge" class="def">AltMerge</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CaseElim" class="def">CaseElim</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:CaseIdentity" class="def">CaseIdentity</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:FillInCaseDefault" class="def">FillInCaseDefault</a> <a href="Var.html#t:Id">Id</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:BottomFound" class="def">BottomFound</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a name="v:SimplifierDone" class="def">SimplifierDone</a></td><td class="doc empty">&nbsp;</td></tr></table></div><div class="subs instances"><p id="control.i:Tick" class="caption collapser" onclick="toggleSection('i:Tick')">Instances</p><div id="section.i:Tick" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Data-Eq.html#t:Eq">Eq</a> <a href="CoreMonad.html#t:Tick">Tick</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Data-Ord.html#t:Ord">Ord</a> <a href="CoreMonad.html#t:Tick">Tick</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="Outputable.html#t:Outputable">Outputable</a> <a href="CoreMonad.html#t:Tick">Tick</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><h1 id="g:4">The monad
</h1><div class="top"><p class="src"><span class="keyword">data</span>  <a name="t:CoreM" class="def">CoreM</a> a </p><div class="doc"><p>The monad used by Core-to-Core passes to access common state, register simplification
 statistics and so on
</p></div><div class="subs instances"><p id="control.i:CoreM" class="caption collapser" onclick="toggleSection('i:CoreM')">Instances</p><div id="section.i:CoreM" class="show"><table><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Monad">Monad</a> <a href="CoreMonad.html#t:CoreM">CoreM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:Functor">Functor</a> <a href="CoreMonad.html#t:CoreM">CoreM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="../base-4.5.1.0/Control-Monad.html#t:MonadPlus">MonadPlus</a> <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> =&gt; <a href="../base-4.5.1.0/Control-Monad.html#t:MonadPlus">MonadPlus</a> <a href="CoreMonad.html#t:CoreM">CoreM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:Applicative">Applicative</a> <a href="CoreMonad.html#t:CoreM">CoreM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="MonadUtils.html#t:MonadIO">MonadIO</a> <a href="CoreMonad.html#t:CoreM">CoreM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="UniqSupply.html#t:MonadUnique">MonadUnique</a> <a href="CoreMonad.html#t:CoreM">CoreM</a></td><td class="doc empty">&nbsp;</td></tr><tr><td class="src"><a href="HscTypes.html#t:MonadThings">MonadThings</a> <a href="CoreMonad.html#t:CoreM">CoreM</a></td><td class="doc empty">&nbsp;</td></tr></table></div></div></div><div class="top"><p class="src"><a name="v:runCoreM" class="def">runCoreM</a> ::  <a href="HscTypes.html#t:HscEnv">HscEnv</a> -&gt; <a href="Rules.html#t:RuleBase">RuleBase</a> -&gt; <a href="UniqSupply.html#t:UniqSupply">UniqSupply</a> -&gt; <a href="Module.html#t:Module">Module</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> a -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> (a, <a href="CoreMonad.html#t:SimplCount">SimplCount</a>)</p></div><h2 id="g:5">Reading from the monad
</h2><div class="top"><p class="src"><a name="v:getHscEnv" class="def">getHscEnv</a> :: <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="HscTypes.html#t:HscEnv">HscEnv</a></p></div><div class="top"><p class="src"><a name="v:getRuleBase" class="def">getRuleBase</a> :: <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="Rules.html#t:RuleBase">RuleBase</a></p></div><div class="top"><p class="src"><a name="v:getModule" class="def">getModule</a> :: <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="Module.html#t:Module">Module</a></p></div><div class="top"><p class="src"><a name="v:getDynFlags" class="def">getDynFlags</a> :: <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="DynFlags.html#t:DynFlags">DynFlags</a></p></div><div class="top"><p class="src"><a name="v:getOrigNameCache" class="def">getOrigNameCache</a> :: <a href="CoreMonad.html#t:CoreM">CoreM</a> <a href="HscTypes.html#t:OrigNameCache">OrigNameCache</a></p><div class="doc"><p>The original name cache is the current mapping from <code><a href="Module.html#t:Module">Module</a></code> and
 <code>OccName</code> to a compiler-wide unique <code><a href="Name.html#t:Name">Name</a></code>
</p></div></div><h2 id="g:6">Writing to the monad
</h2><div class="top"><p class="src"><a name="v:addSimplCount" class="def">addSimplCount</a> :: <a href="CoreMonad.html#t:SimplCount">SimplCount</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</p></div><h2 id="g:7">Lifting into the monad
</h2><div class="top"><p class="src"><a name="v:liftIO" class="def">liftIO</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> a -&gt; m a</p></div><div class="top"><p class="src"><a name="v:liftIOWithCount" class="def">liftIOWithCount</a> ::  <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> (<a href="CoreMonad.html#t:SimplCount">SimplCount</a>, a) -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> a</p><div class="doc"><p>Lift an <code><a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a></code> operation into <code><a href="CoreMonad.html#t:CoreM">CoreM</a></code> while consuming its <code><a href="CoreMonad.html#t:SimplCount">SimplCount</a></code>
</p></div></div><div class="top"><p class="src"><a name="v:liftIO1" class="def">liftIO1</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> b) -&gt; a -&gt; m b</p><div class="doc"><p>Lift an <code><a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a></code> operation with 1 argument into another monad
</p></div></div><div class="top"><p class="src"><a name="v:liftIO2" class="def">liftIO2</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; b -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> c) -&gt; a -&gt; b -&gt; m c</p><div class="doc"><p>Lift an <code><a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a></code> operation with 2 arguments into another monad
</p></div></div><div class="top"><p class="src"><a name="v:liftIO3" class="def">liftIO3</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; b -&gt; c -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> d) -&gt; a -&gt; b -&gt; c -&gt; m d</p><div class="doc"><p>Lift an <code><a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a></code> operation with 3 arguments into another monad
</p></div></div><div class="top"><p class="src"><a name="v:liftIO4" class="def">liftIO4</a> :: <a href="MonadUtils.html#t:MonadIO">MonadIO</a> m =&gt; (a -&gt; b -&gt; c -&gt; d -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> e) -&gt; a -&gt; b -&gt; c -&gt; d -&gt; m e</p><div class="doc"><p>Lift an <code><a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a></code> operation with 4 arguments into another monad
</p></div></div><h2 id="g:8">Global initialization
</h2><div class="top"><p class="src"><a name="v:reinitializeGlobals" class="def">reinitializeGlobals</a> :: <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</p></div><h2 id="g:9">Dealing with annotations
</h2><div class="top"><p class="src"><a name="v:getAnnotations" class="def">getAnnotations</a> :: <a href="../base-4.5.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> a =&gt; ([<a href="../base-4.5.1.0/Data-Word.html#t:Word8">Word8</a>] -&gt; a) -&gt; <a href="HscTypes.html#t:ModGuts">ModGuts</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> (<a href="UniqFM.html#t:UniqFM">UniqFM</a> [a])</p><div class="doc"><p>Get all annotations of a given type. This happens lazily, that is
 no deserialization will take place until the [a] is actually demanded and
 the [a] can also be empty (the UniqFM is not filtered).
</p><p>This should be done once at the start of a Core-to-Core pass that uses
 annotations.
</p><p>See Note [Annotations]
</p></div></div><div class="top"><p class="src"><a name="v:getFirstAnnotations" class="def">getFirstAnnotations</a> :: <a href="../base-4.5.1.0/Data-Typeable-Internal.html#t:Typeable">Typeable</a> a =&gt; ([<a href="../base-4.5.1.0/Data-Word.html#t:Word8">Word8</a>] -&gt; a) -&gt; <a href="HscTypes.html#t:ModGuts">ModGuts</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> (<a href="UniqFM.html#t:UniqFM">UniqFM</a> a)</p><div class="doc"><p>Get at most one annotation of a given type per Unique.
</p></div></div><h2 id="g:10">Debug output
</h2><div class="top"><p class="src"><a name="v:showPass" class="def">showPass</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a> -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> ()</p></div><div class="top"><p class="src"><a name="v:endPass" class="def">endPass</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a> -&gt; <a href="CoreSyn.html#t:CoreProgram">CoreProgram</a> -&gt; [<a href="CoreSyn.html#t:CoreRule">CoreRule</a>] -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> ()</p></div><div class="top"><p class="src"><a name="v:dumpPassResult" class="def">dumpPassResult</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="DynFlags.html#t:DynFlag">DynFlag</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="CoreSyn.html#t:CoreProgram">CoreProgram</a> -&gt; [<a href="CoreSyn.html#t:CoreRule">CoreRule</a>] -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> ()</p></div><div class="top"><p class="src"><a name="v:lintPassResult" class="def">lintPassResult</a> :: <a href="DynFlags.html#t:DynFlags">DynFlags</a> -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a> -&gt; <a href="CoreSyn.html#t:CoreProgram">CoreProgram</a> -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> ()</p></div><div class="top"><p class="src"><a name="v:dumpIfSet" class="def">dumpIfSet</a> :: <a href="../base-4.5.1.0/Data-Bool.html#t:Bool">Bool</a> -&gt; <a href="CoreMonad.html#t:CoreToDo">CoreToDo</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="../base-4.5.1.0/System-IO.html#t:IO">IO</a> ()</p></div><h2 id="g:11">Screen output
</h2><div class="top"><p class="src"><a name="v:putMsg" class="def">putMsg</a> :: <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</p><div class="doc"><p>Output a message to the screen
</p></div></div><div class="top"><p class="src"><a name="v:putMsgS" class="def">putMsgS</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</p><div class="doc"><p>Output a String message to the screen
</p></div></div><div class="top"><p class="src"><a name="v:errorMsg" class="def">errorMsg</a> :: <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</p><div class="doc"><p>Output an error to the screen
</p></div></div><div class="top"><p class="src"><a name="v:errorMsgS" class="def">errorMsgS</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</p><div class="doc"><p>Output a string error to the screen
</p></div></div><div class="top"><p class="src"><a name="v:fatalErrorMsg" class="def">fatalErrorMsg</a> :: <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</p><div class="doc"><p>Output a fatal error to the screen. Note this does not by itself cause the compiler to die
</p></div></div><div class="top"><p class="src"><a name="v:fatalErrorMsgS" class="def">fatalErrorMsgS</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</p><div class="doc"><p>Output a fatal string error to the screen. Note this does not by itself cause the compiler to die
</p></div></div><div class="top"><p class="src"><a name="v:debugTraceMsg" class="def">debugTraceMsg</a> :: <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</p><div class="doc"><p>Outputs a debugging message at verbosity level of <code>-v</code> or higher
</p></div></div><div class="top"><p class="src"><a name="v:debugTraceMsgS" class="def">debugTraceMsgS</a> :: <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</p><div class="doc"><p>Output a string debugging message at verbosity level of <code>-v</code> or higher
</p></div></div><div class="top"><p class="src"><a name="v:dumpIfSet_dyn" class="def">dumpIfSet_dyn</a> :: <a href="DynFlags.html#t:DynFlag">DynFlag</a> -&gt; <a href="../base-4.5.1.0/Data-String.html#t:String">String</a> -&gt; <a href="Outputable.html#t:SDoc">SDoc</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> ()</p><div class="doc"><p>Show some labelled <code><a href="Outputable.html#t:SDoc">SDoc</a></code> if a particular flag is set or at a verbosity level of <code>-v -ddump-most</code> or higher
</p></div></div><h1 id="g:12">Getting <code><a href="Name.html#t:Name">Name</a></code>s
</h1><div class="top"><p class="src"><a name="v:thNameToGhcName" class="def">thNameToGhcName</a> :: <a href="../template-haskell-2.7.0.0/Language-Haskell-TH-Syntax.html#t:Name">Name</a> -&gt; <a href="CoreMonad.html#t:CoreM">CoreM</a> (<a href="../base-4.5.1.0/Data-Maybe.html#t:Maybe">Maybe</a> <a href="Name.html#t:Name">Name</a>)</p><div class="doc"><p>Attempt to convert a Template Haskell name to one that GHC can
 understand. Original TH names such as those you get when you use
 the <code>'foo</code> syntax will be translated to their equivalent GHC name
 exactly. Qualified or unqualifed TH names will be dynamically bound
 to names in the module being compiled, if possible. Exact TH names
 will be bound to the name they represent, exactly.
</p></div></div></div></div><div id="footer"><p>Produced by <a href="http://www.haskell.org/haddock/">Haddock</a> version 2.11.0</p></div></body></html>