The flag enables the use of Show instances in :print.
By default they are not used anymore
import UniqSupply
import TcType
import GHC
+import DynFlags
import InteractiveEval
import Outputable
import Pretty ( Mode(..), showDocWith )
-- A custom Term printer to enable the use of Show instances
showTerm :: Session -> Term -> IO SDoc
-showTerm cms@(Session ref) = cPprTerm (liftM2 (++) cPprShowable cPprTermBase)
+showTerm cms@(Session ref) term = do
+ dflags <- GHC.getSessionDynFlags cms
+ if dopt Opt_PrintEvldWithShow dflags
+ then cPprTerm (liftM2 (++) cPprShowable cPprTermBase) term
+ else cPprTerm cPprTermBase term
where
cPprShowable _y = [\prec ty _ val tt ->
if not (all isFullyEvaluatedTerm tt)
| Opt_Hpc_No_Auto
| Opt_BreakOnException
| Opt_BreakOnError
+ | Opt_PrintEvldWithShow
| Opt_GenManifest
| Opt_EmbedManifest
| Opt_RunCPSZ
( "rewrite-rules", Opt_RewriteRules ),
( "break-on-exception", Opt_BreakOnException ),
( "break-on-error", Opt_BreakOnError ),
+ ( "print-evld-with-show", Opt_PrintEvldWithShow ),
( "run-cps", Opt_RunCPSZ ),
( "convert-to-zipper-and-back", Opt_ConvertToZipCfgAndBack),
( "vectorise", Opt_Vectorise ),
<entry><option>-fno-break-on-error</option></entry>
</row>
<row>
+ <entry><option>-fprint-evld-with-show</option></entry>
+ <entry><link linkend="breakpoints">Enable usage of Show instances in <literal>:print</literal></link></entry>
+ <entry>dynamic</entry>
+ <entry><option>-fno-print-evld-with-show</option></entry>
+ </row>
+ <row>
<entry><option>-fno-print-bind-result</option></entry>
<entry><link linkend="ghci-stmts">Turn off printing of binding results in GHCi</link></entry>
<entry>dynamic</entry>
<literal>left</literal>:</para>
<screen>
+[qsort.hs:2:15-46] *Main> :set -fprint-evld-with-show
[qsort.hs:2:15-46] *Main> :print left
left = (_t1::[a])
</screen>
underscore, in this case
<literal>_t1</literal>.</para>
+ <para>The flag <literal>-fprint-evld-with-show</literal> instructs
+ <literal>:print</literal> to reuse
+ available <literal>Show</literal> instances when possible. This happens
+ only when the contents of the variable being inspected
+ are completely evaluated.</para>
+
+
<para>If we aren't concerned about preserving the evaluatedness of a
variable, we can use <literal>:force</literal> instead of
<literal>:print</literal>. The <literal>:force</literal> command
<para>The execution continued at the point it previously stopped, and has
now stopped at the breakpoint for a second time.</para>
+
<sect3 id="setting-breakpoints">
<title>Setting breakpoints</title>