GHCi debugger: Added a -fprint-evld-with-show flag
authorPepe Iborra <mnislaih@gmail.com>
Wed, 12 Sep 2007 15:35:05 +0000 (15:35 +0000)
committerPepe Iborra <mnislaih@gmail.com>
Wed, 12 Sep 2007 15:35:05 +0000 (15:35 +0000)
    The flag enables the use of Show instances in :print.
    By default they are not used anymore

compiler/ghci/Debugger.hs
compiler/main/DynFlags.hs
docs/users_guide/flags.xml
docs/users_guide/ghci.xml

index 179f684..5833e26 100644 (file)
@@ -25,6 +25,7 @@ import Name
 import UniqSupply
 import TcType
 import GHC
+import DynFlags
 import InteractiveEval
 import Outputable
 import Pretty                    ( Mode(..), showDocWith )
@@ -138,7 +139,11 @@ bindSuspensions cms@(Session ref) t = do
 
 --  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)
index 38591f0..c36a402 100644 (file)
@@ -266,6 +266,7 @@ data DynFlag
    | Opt_Hpc_No_Auto
    | Opt_BreakOnException
    | Opt_BreakOnError
+   | Opt_PrintEvldWithShow
    | Opt_GenManifest
    | Opt_EmbedManifest
    | Opt_RunCPSZ
@@ -1192,6 +1193,7 @@ fFlags = [
   ( "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 ),
index b417f7e..d706f11 100644 (file)
              <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>
index b1e36ec..579cf23 100644 (file)
@@ -929,6 +929,7 @@ right :: [a]
         <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>
@@ -948,6 +949,13 @@ left = (_t1::[a])
         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
@@ -1017,6 +1025,7 @@ right :: [a]
       <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>