An example is worth a thousand words. This is the kind of output we
get now at a breakpoint:
Stopped at Setup.lhs:24:27-65
_result :: IO () = _
iff :: InstallFlags = _
lbi ::
LocalBuildInfo = LocalBuildInfo (InstallDirTemplates
(Distribution.Simple.InstallDirs.PathTemplate [...])
(Distribution.Simple.InstallDirs.PathTemplate [...]) ....)
(Compiler GHC
(PackageIdentifier ...) ....) _ _ ....
pd :: Distribution.PackageDescription.PackageDescription = _
uh :: UserHooks = UserHooks _ _ [] [] ....
I declare this good enoughâ„¢
For reference, this is what you get if you print lbi at this point:
[Setup.lhs:24:27-65] *Main> :p lbi
lbi = LocalBuildInfo (InstallDirTemplates
(Distribution.Simple.InstallDirs.PathTemplate
[Distribution.Simple.InstallDirs.Ordinary (_t1::FilePath)])
(Distribution.Simple.InstallDirs.PathTemplate
[Distribution.Simple.InstallDirs.Variable PrefixVar,
Distribution
.Simple.InstallDirs.Ordinary (_t2::FilePath)])
(Distribution.Simple.InstallDirs.PathTemplate
[Distribution.Simple.InstallDirs.Variable PrefixVar,
Distribution
.Simple.InstallDirs.Ordinary (_t3::FilePath)])
(Distribution.Simple.InstallDirs.PathTemplate
[Distribution.Simple.InstallDirs.Variable PkgIdVar,
Distribution
.Simple.InstallDirs.Ordinary (_t4::FilePath),
Distribution
.Simple.InstallDirs.Variable CompilerVar])
(Distribution.Simple.InstallDirs.PathTemplate
[Distribution.Simple.InstallDirs.Variable PrefixVar,
Distribution
.Simple.InstallDirs.Ordinary (_t5::FilePath)])
(Distribution.Simple.InstallDirs.PathTemplate
[Distribution.Simple.InstallDirs.Variable LibDirVar,
Distribution
.Simple.InstallDirs.Ordinary (_t6::FilePath)])
(Distribution.Simple.InstallDirs.PathTemplate
[Distribution.Simple.InstallDirs.Variable LibDirVar,
Distribution
.Simple.InstallDirs.Ordinary (_t7::FilePath),
Distribution
.Simple.InstallDirs.Variable LibSubdirVar,
Distribution
.Simple.InstallDirs.Ordinary (_t8::FilePath)])
(Distribution.Simple.InstallDirs.PathTemplate
[Distribution.Simple.InstallDirs.Variable PrefixVar,
Distribution
.Simple.InstallDirs.Ordinary (_t9::FilePath)])
(Distribution.Simple.InstallDirs.PathTemplate
[Distribution.Simple.InstallDirs.Variable PkgIdVar])
(Distribution.Simple.InstallDirs.PathTemplate
[Distribution.Simple.InstallDirs.Variable DataDirVar,
Distribution
.Simple.InstallDirs.Ordinary (_t10::FilePath),
Distribution
.Simple.InstallDirs.Variable PkgIdVar])
(Distribution.Simple.InstallDirs.PathTemplate
[Distribution.Simple.InstallDirs.Variable DocDirVar,
Distribution
.Simple.InstallDirs.Ordinary (_t11::FilePath)])
(Distribution.Simple.InstallDirs.PathTemplate
[Distribution.Simple.InstallDirs.Variable DocDirVar,
Distribution
.Simple.InstallDirs.Ordinary (_t12::FilePath)]))
(Compiler GHC
(PackageIdentifier (_t13::String)
(Version
[(_t14::Int),(_t15::Int),(_t16::Int)] []))
[(CPP,(_t17::Flag)),(PatternGuards,
(_t18::Flag)),(MagicHash,(_t19::Flag)),
(PolymorphicComponents,(_t20::Flag)),
(ExistentialQuantification,(_t21::Flag)),
(KindSignatures,(_t22::Flag)),
(EmptyDataDecls,(_t23::Flag)),
(ParallelListComp,(_t24::Flag)),
(ForeignFunctionInterface,(_t25::Flag)),
(Rank2Types,(_t26::Flag)),
(RankNTypes,(_t27::Flag)),(RecursiveDo,(_t28::Flag)),
(Arrows,(_t29::Flag)),
(TemplateHaskell,(_t30::Flag)),(Generics,(_t31::Flag)),
(NoImplicitPrelude,(_t32::Flag)),
(TypeFamilies,(_t33::Flag)),
(BangPatterns,(_t34::Flag)),
(NoMonomorphismRestriction,(_t35::Flag)),
(ImplicitParams,(_t36::Flag)),
(ScopedTypeVariables,(_t37::Flag)),
(StandaloneDeriving,(_t38::Flag)),
(TypeSynonymInstances,(_t39::Flag)),
(FlexibleContexts,(_t40::Flag)),
(FlexibleInstances,(_t41::Flag)),
(MultiParamTypeClasses,(_t42::Flag)),
(FunctionalDependencies,(_t43::Flag)),
(GeneralizedNewtypeDeriving,
(_t44::Flag)),(OverlappingInstances,(_t45::Flag)),
(UndecidableInstances,(_t46::Flag)),
(IncoherentInstances,(_t47::Flag))])
(_t48::FilePath) (_t49::FilePath)
[PackageIdentifier (_t50::String)
(Version [(_t51::Int),
(_t52::Int),(_t53::Int),(_t54::Int)] []),
PackageIdentifier (_t55::String)
(Version [(_t56::Int),
(_t57::Int),(_t58::Int)] []),
PackageIdentifier (_t59::String)
(Version [(_t60::Int),
(_t61::Int),(_t62::Int),(_t63::Int)] []),
PackageIdentifier (_t64::String)
(Version [(_t65::Int),
(_t66::Int),(_t67::Int),(_t68::Int)] []),
PackageIdentifier (_t69::String)
(Version [(_t70::Int),
(_t71::Int),(_t72::Int),(_t73::Int)] []),
PackageIdentifier (_t74::String)
(Version [(_t75::Int),
(_t76::Int),(_t77::Int),(_t78::Int)] []),
PackageIdentifier (_t79::String)
(Version [(_t80::Int),
(_t81::Int),(_t82::Int),(_t83::Int)] []),
PackageIdentifier (_t84::String)
(Version [(_t85::Int),
(_t86::Int),(_t87::Int),(_t88::Int)] []),
PackageIdentifier (_t89::String)
(Version [(_t90::Int),
(_t91::Int),(_t92::Int),(_t93::Int)] []),
PackageIdentifier (_t94::String)
(Version [(_t95::Int),
(_t96::Int),(_t97::Int),(_t98::Int)] []),
PackageIdentifier (_t99::String)
(Version [(_t100::Int),
(_t101::Int),(_t102::Int),(_t103::Int)] []),
PackageIdentifier (_t104::String)
(Version [(_t105::Int),
(_t106::Int),(_t107::Int),(_t108::Int)] []),
PackageIdentifier (_t109::String)
(Version [(_t110::Int),
(_t111::Int),(_t112::Int),(_t113::Int)] []),
PackageIdentifier (_t114::String)
(Version [(_t115::Int),
(_t116::Int),(_t117::Int),(_t118::Int)] []),
PackageIdentifier (_t119::String)
(Version [(_t120::Int),
(_t121::Int),(_t122::Int),(_t123::Int)] [])]
(Just ['s','h','i','m','.','c','a','b','a','l'])
(Distribution.PackageDescription.PackageDescription
(PackageIdentifier (_t124::String)
(Version
[(_t125::Int),
(_t126
::Int)]
[]))
BSD3
(_t127::FilePath) (_t128::String)
(_t129
::String) (_t130::String) (_t131::String)
[] (_t132
::String) (_t133::String)
(_t134
::String) (_t135::String) (_t136::String)
[Dependency
(_t137::String) AnyVersion,
Dependency
(_t138::String) AnyVersion,
Dependency
(_t139::String) AnyVersion,
Dependency
(_t140::String) AnyVersion,
Dependency
(_t141::String) AnyVersion,
Dependency
(_t142::String) AnyVersion,
Dependency
(_t143::String)
(UnionVersionRanges
(ThisVersion (Version [(_t144::Int),
(_t145
::Int)]
[]))
(LaterVersion
(Version [(_t146::Int),
(_t147
::Int)]
[]))),
Dependency
(_t148::String) AnyVersion,
Dependency
(_t149::String) AnyVersion,
Dependency
(_t150::String) AnyVersion,
Dependency
(_t151::String) AnyVersion,
Dependency
(_t152::String) AnyVersion,
Dependency
(_t153::String) AnyVersion,
Dependency
(_t154::String) AnyVersion,
Dependency
(_t155::String)
(UnionVersionRanges
(ThisVersion (Version [(_t156::Int),
(_t157
::Int),
(_t158
::Int)]
[]))
(LaterVersion
(Version [(_t159::Int),
(_t160
::Int),
(_t161
::Int)]
[])))]
(UnionVersionRanges
(ThisVersion (Version [(_t162::Int),
(_t163
::Int)]
[]))
(LaterVersion
(Version [(_t164::Int),
(_t165
::Int)]
[])))
Distribution
.PackageDescription.Custom Nothing
[Distribution
.PackageDescription.Executable (_t166::String)
(_t167
::FilePath)
(Distribution
.PackageDescription.BuildInfo True
[]
[]
[]
[]
[]
[]
[]
[(_t168
::FilePath)]
[]
[]
[]
[]
[]
[]
[]
[(GHC
,[(_t169::String)])]
[]
[]),
Distribution
.PackageDescription.Executable (_t170::String)
(_t171
::FilePath)
(Distribution
.PackageDescription.BuildInfo True
[]
[]
[]
[]
[]
[]
[]
[(_t172
::FilePath)]
[]
[]
[]
[]
[]
[]
[]
[(GHC
,[(_t173::String),
(_t174
::String)])]
[]
[])]
[(_t175
::FilePath)] [(_t176::FilePath)] [])
(Distribution.Simple.Program.ProgramConfiguration Data.Map.Tip
(_t177
::Distribution.Simple.Program.ConfiguredProgs))
UserPackageDB True False False False True True
False
[Setup.lhs:24:27-65] *Main>
On 15/11/2007, at 10:55, pepe wrote:
The bunch of patches I just pushed make use of the ppr_deeper
primitives from Outputable, and now we cut the output at the
depth(and width) given by opt_PprUserLength.
I wasn't aware that this functionality was available in Outputable:
it is quite amazing what one can do with these in a few lines of code!
I have also improved some other bits of the Term pretty printer and
am quite satisfied with the end result.
Cheers
pepe
On 14/11/2007, at 10:48, Simon Marlow wrote:
All I meant was that we should use a more refined notion of "depth
limit" which does a good job of cutting off the output before it
grows too large. That might mean limiting not only the depth, but
the width too, for example.
Cheers,
Simon
pepe wrote:
To clarify, this is only when doing ':show bindings', not when
doing ':print'.
Ensuring that the output given never gets too large would mean
arbitrarily cutting it to make it fit, or giving the user some
control over these settings. I remember talking to you about this
in ICFP, and I got the impression you thought it was overkill. Did
I misunderstand ?
For now we have a shallow (fixed) depth limit in the term
reconstruction step which helps to limit the size of terms, but
unfortunately not the size of the output given by the pretty
printer. I plan to experiment with Pretty.fullRender with well-
chosen settings, that should be a big win. Any other suggestion
will be very appreciated.
pepe
On 14/11/2007, at 10:17, Simon Marlow wrote:
Pepe Iborra wrote:
Tue Nov 13 09:45:39 PST 2007 Pepe Iborra <[EMAIL PROTECTED]>
* GHCi debugger: added a new flag, -fno-print-binding-contents
The contents of bindings show at breakpoints and by :show
bindings
is rendered using the same printer that :print uses.
But sometimes the output it gives spans over too many lines and
the
user may want to be able to disable it.
Then wouldn't it be better to ensure that it never gets too
large? Or is that too hard?
Cheers,
Simon
_______________________________________________
Cvs-ghc mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/cvs-ghc