StrategyLib - need help

Ralf Laemmel Ralf.Laemmel@cwi.nl
Fri, 25 Jul 2003 13:15:29 +0200


(Let's go to haskell-cafe if we want to continue.)

Hi Dmitry,

Sigh. Indeed, the distributed instance Show TermRep is not fit.
The default TermRep in the Strafunski distribution is not even
willing to disclose constructor names. So there is no way unless
you tweak TermRep (and DrIFT). TermRep should hold a string component
for the constructor (or the string representation in the case of
primitive types).

I will provide a StrategyLib on top of Data.Generics very soon.
Then your trouble is gone.
(The "Scrap Your Boilerplate" approach is really much more convenient.)

As a quick fix, 
I advise you to code a monster switch as follows.
(Tested in StrategyLib/examples/little-lambda)


testShow        :: [String]
testShow         = runIdentity
                    (applyTU (full_tdTU myShowTU) expr4)
 where
  myShowTU = constTU []
             `adhocTU` (\(x::Expr)-> return [show x])
             `adhocTU` (\(x::Type)-> return [show x])
             `adhocTU` (\(x::Identifier)-> return [show x])


So this is one line per type. Not that bad.
And it is nice because you can comment out types easily
during debugging.

Greetings,
Ralf

>  RL> a) Add a class constraint for Show to the Term class.
>  RL>    (Would that work? It's a bit invasive anyway.)
> Yes, that a bit invasive to say at least. With equal "ease" I can hack
> DrIFT to produce instances of Show the way I want them.
> 
>  RL> b) Alternatively, imoort TermRep and use explode and then show on
>  RL>    TermRep. (This show maybe does not look so nice,
>  RL>     but this should be good enough for debugging.)
> I dont quite follow you here. If I (show . explode) the topmost Term, I got
> just the name of the type of that term. If I try to build a traversal which
> "explode"-s everything on the way, I got the same error as before (which is
> expected, I believe).
> 
>  RL> c) Be more specific about what terms to print,
>  RL>    say have type-specific cases for types of terms of interest. (This
>  RL>    would be reasonable if you only care about a few types,
>  RL>     or there are even just a few types anyway.)
> Thing is that there is a lot of types and I'd like to print all of them.
> 
> --
> Dmitry Astapov //ADEpt
> GPG KeyID/fprint: F5D7639D/CA36 E6C4 815D 434D 0498  2B08 7867 4860 F5D7 639D
> _______________________________________________
> Haskell mailing list
> Haskell@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell

-- 
Ralf Laemmel
VU & CWI, Amsterdam, The Netherlands
http://www.cs.vu.nl/~ralf/
http://www.cwi.nl/~ralf/