
Andy Gimblett
show (External p q) = "(" ++ show p ++ " [] " ++ show q ++ ")"
but to me the extensive use of ++ is not particularly readable.
[...]
return "(%s [] %s)" % (self.p, self.q)
which to me seems clearer, or at least easier to work out roughly what the string's going to look like.
I wish to toss out a new thought. To that end let me blow up the example to underline a scalability issue: A. q ++ " " ++ a ++ " " ++ z ++ " [" ++ m ++ " -> " ++ k ++ " |" ++ p ++ "| " ++ g ++ " -> " ++ c ++ "] " ++ h ++ " " ++ b ++ " " ++ f ++ " " ++ i B. printf "%s %s %s [%s -> %s |%s| %s -> %s] %s %s %s %s" q a z m k p g c h b f i B looks clearer because without parsing you can see that the output will contain a |blah| between two blah->blah's inside square brackets, etc. A looks clearer because without counting you can see that p is the thing that will go into |blah|, the first blah->blah will be m->k, etc. The best of both worlds may be something like the notation in the HOL theorem prover: ``^q ^a ^z [^m -> ^k |^p| ^g -> ^c] ^h ^b ^f ^i`` Do you agree that this is much better? Could someone implement something like this in GHC please? :)