Collecting values from Functors?

Ralf Laemmel Ralf.Laemmel@cwi.nl
Thu, 05 Jun 2003 10:44:04 +0200


Ralf Hinze wrote:

> What happens if the tree contains additional integers to record,
> say, balancing information. The information a functor provides
> is vital here. Take as the simplest example
> 
>   newtype Weighted a = WithWeight (Int, a)
> 
> Without the functor definition there is no way to distinguish the
> two Ints in Weighted Int.

You are right in that
gmapping is not generally aware of term components
that relate to the parameter of a parameterised datatype.
This has to do with the restricted structural induction
and with the bias towards nominal type case. One can still
recover `type distinctions' by pattern matching however.
I elaborated the example like this:
http://www.cs.vu.nl/boilerplate/testsuite/foldTree.hs

(More generally, it is certainly debatable if the gmap
combinators are in place for more fancy datatypes, e.g., 
nested datatypes. I mean that the design and use of these
datatypes is normally an ingenious process as opposed to
boilerplate programming in the sense of AST or document
traversal.)

Ralf L.

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