[Haskell-cafe] Re: Graphical graph reduction

apfelmus apfelmus at quantentunnel.de
Fri Feb 22 12:05:50 EST 2008


Kai wrote:
> Wouldn't it be great if I had a visual tool that visually
> showed me the graph while the above evaluation unfolded?
>
> Does anybody know if such a tool exists?

I don't know of such a tool, the closest one to that is probably the new 
ghci debugger.

There is also a paper and accompanying website

   Peter Sestoft. "Demonstrating Lambda Calculus Reduction".
   http://www.dina.kvl.dk/~sestoft/lamreduce/

but graph reduction with sharing is not covered.

Slightly off topic, Twan's blog post

   http://twan.home.fmf.nl/blog/haskell/
     simple-reflection-of-expressions.details

demonstrates a neat way to figure out how (polymorphic) higher-order 
functions like  foldr  or  foldl  work. It would be really cool if there 
was a similar embedded approach for graph reduction, but I don't think 
that's possible.

> If nothing similar exists, I was thinking about creating such a tool (i.e.
> an interpreter with additional graph-displaying features) for a very, very
> small subset/dialect of Haskell.

The Haskell wikibook <http://en.wikibooks.org/wiki/Haskell> would 
greatly benefit from such a tool for the chapters about graph reduction, 
so I'd be a potential user :)

> I would probably be lazy (no pun intended)
> and start right away with abstract syntax trees to avoid lexing and parsing
> and such.  My language of implementation would be SML, using references as
> the edges of the graph.

Of course, I'd prefer Haskell as the implementation language and since 
you want to learn Haskell anyway ... :)

Concerning the graph representation, using references is probably a bad 
idea anyway since they're not purely functional in style. There is 
Martin Erwig's Functional Graph Library (Data.Graph.Inductive) shipping 
with ghc:

   Martin Erwig. Inductive Graphs and Functional Graph Algorithms.
   http://web.engr.oregonstate.edu/~erwig/papers/abstracts.html#JFP01

There is also

   Norman Ramsey, João Dias.
   "An Applicative Control-Flow Graph Based on Huet’s Zipper".

which uses a zipper to represent a control-flow graph. I'm mentioning 
this paper for the following quote: "the mutable flow graph was big and 
complex, and it led to many bugs. We have replaced it by a smaller, 
simpler, applicative flow graph based on Huet’s (1997) zipper. The new 
flow graph is a success." In other words: forget mutable references :)

Moreover, it's not clear whether a graph should be used at all. Well, at 
least concerning the _presentation_. A todo-note at the beginning of 
<http://en.wikibooks.org/wiki/Haskell/Graph_reduction> lists the 
possible choices, I'm currently leaning in favor of a  let .. in 
statements in the spirit of

   John Maraist, Martin Odersky and Philip Wadler.
   "The call-by-need lambda calculus".
   http://homepages.inf.ed.ac.uk/wadler/topics/
     call-by-need.html#need-journal


Overall, the main problem for a graph reduction demonstration tool to 
solve is not how to perform graph reduction but how to present it. The 
point is: the tool is unnecessary for very simple examples since those 
are better done by hand. But an unsophisticated tool is useless for the 
more complicated cases too, since no one can make sense of the output 
anymore!


Regards,
apfelmus



More information about the Haskell-Cafe mailing list