Record update fusion (or how should I call it?)

I've seen a couple of package being announced that provide first class labels, and other packages already existed for this (Grapefruit Record, HList, Accessor, ...) Regarding this, I have a question about the performance of multiple composed field updates. Maybe an example. Suppose I have a large record - say WindowDescription - which contains a lot of fields. Suppose I have a couple of default window description values, e.g. defaultWindowDesc, dialogBoxDesc, etc Using accessors it is easy to take such a default value, and "modify" a couple of fields, like: let myWindowDesc = set title "Haskell" . set size (640,480) . set background Blue . set fontFamily Arial $ defaultWindowDesc However, I guess this would make a lot of intermediate WindowDescription copies no (whether the fields are strict or not)? So ideally for performance, all these "updates" should be fused, maybe running inside an ST monad? I'm not sure if any of this is valid, but I would like to understand more about this, so any links and hints are welcome :-) Peter Verswyvelen

The first thing I would do i is verify that the compiler is not
already doing this.
On Sun, Sep 6, 2009 at 7:50 AM, Peter Verswyvelen
I've seen a couple of package being announced that provide first class labels, and other packages already existed for this (Grapefruit Record, HList, Accessor, ...)
Regarding this, I have a question about the performance of multiple composed field updates. Maybe an example.
Suppose I have a large record - say WindowDescription - which contains a lot of fields.
Suppose I have a couple of default window description values, e.g. defaultWindowDesc, dialogBoxDesc, etc
Using accessors it is easy to take such a default value, and "modify" a couple of fields, like:
let myWindowDesc = set title "Haskell" . set size (640,480) . set background Blue . set fontFamily Arial $ defaultWindowDesc
However, I guess this would make a lot of intermediate WindowDescription copies no (whether the fields are strict or not)? So ideally for performance, all these "updates" should be fused, maybe running inside an ST monad?
I'm not sure if any of this is valid, but I would like to understand more about this, so any links and hints are welcome :-)
Peter Verswyvelen _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

Use Haskell records:
defaultWindowDescription= WindowDescription {title="", size=(0,0) ......}
Many modifications can be fused in a single statement. for example:
newWindowDescription= defaultWindowDescription{itle= "Haskell" ; size=
(640,480),background= Blue}
2009/9/6 Derek Elkins
The first thing I would do i is verify that the compiler is not already doing this.
On Sun, Sep 6, 2009 at 7:50 AM, Peter Verswyvelen
wrote: I've seen a couple of package being announced that provide first class labels, and other packages already existed for this (Grapefruit Record, HList, Accessor, ...)
Regarding this, I have a question about the performance of multiple composed field updates. Maybe an example.
Suppose I have a large record - say WindowDescription - which contains a lot of fields.
Suppose I have a couple of default window description values, e.g. defaultWindowDesc, dialogBoxDesc, etc
Using accessors it is easy to take such a default value, and "modify" a couple of fields, like:
let myWindowDesc = set title "Haskell" . set size (640,480) . set background Blue . set fontFamily Arial $ defaultWindowDesc
However, I guess this would make a lot of intermediate WindowDescription copies no (whether the fields are strict or not)? So ideally for performance, all these "updates" should be fused, maybe running inside an ST monad?
I'm not sure if any of this is valid, but I would like to understand more about this, so any links and hints are welcome :-)
Peter Verswyvelen _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe

Yes of course Haskell records do this, but these updates are not first class.
But this kind of fusion seems rather general.
I haven't checked if the compiler already does it.
On Sun, Sep 6, 2009 at 9:19 PM, Alberto G. Corona
Use Haskell records:
defaultWindowDescription= WindowDescription {title="", size=(0,0) ......}
Many modifications can be fused in a single statement. for example:
newWindowDescription= defaultWindowDescription{itle= "Haskell" ; size= (640,480),background= Blue}
2009/9/6 Derek Elkins
: The first thing I would do i is verify that the compiler is not already doing this.
On Sun, Sep 6, 2009 at 7:50 AM, Peter Verswyvelen
wrote: I've seen a couple of package being announced that provide first class labels, and other packages already existed for this (Grapefruit Record, HList, Accessor, ...)
Regarding this, I have a question about the performance of multiple composed field updates. Maybe an example.
Suppose I have a large record - say WindowDescription - which contains a lot of fields.
Suppose I have a couple of default window description values, e.g. defaultWindowDesc, dialogBoxDesc, etc
Using accessors it is easy to take such a default value, and "modify" a couple of fields, like:
let myWindowDesc = set title "Haskell" . set size (640,480) . set background Blue . set fontFamily Arial $ defaultWindowDesc
However, I guess this would make a lot of intermediate WindowDescription copies no (whether the fields are strict or not)? So ideally for performance, all these "updates" should be fused, maybe running inside an ST monad?
I'm not sure if any of this is valid, but I would like to understand more about this, so any links and hints are welcome :-)
Peter Verswyvelen _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe
participants (3)
-
Alberto G. Corona
-
Derek Elkins
-
Peter Verswyvelen