
(Sorry to break the thread, but mutt somehow managed to eat the message I'm replying to...) Arie Peterson:
You could also use 'compositional functional references'. These are introduced in the paper "A Functional Programming Technique for Forms in Graphical User Interfaces" by Sander Evers, Peter Achten and Jan Kuper.
=== Introduction ===
There are two things one typically wants to do when working with a substructure of some larger data structure: (1) extract the substructure; and (2) change the larger structure by acting on the substructure. A 'Ref cx t' encodes both of these functions (for a substructure of type 't' and larger structure (context) of type 'cx').
data Ref cx t = Ref { select :: cx -> t , update :: (t -> t) -> cx -> cx } ... I've written a template haskell function to derive Refs from a data > structure definition (with record syntax): given
I've implemented this in Derive[1] in 12 minutes, counting the time required to re-familiarize with the code. The patch is at [2] and has also been darcs sent. [1] http://www-users.cs.york.ac.uk/~ndm/derive [2] http://members.cox.net/stefanor/derive-Ref-patch Stefan