[Haskell] Proposal: Allow "\=" for field update in record update
syntax
Ben Rudiak-Gould
Benjamin.Rudiak-Gould at cl.cam.ac.uk
Wed Mar 2 07:58:43 EST 2005
Benjamin Franksen wrote:
>On Thursday 24 February 2005 23:27, Keean Schupke wrote:
>
>>Well, not quite true, because the type of the label is used to index the
>>value, the selection happens at compile time. So at run time there is no
>>instance selection left... it is simply the value. At least in theory!
>
>Hmm. I haven't seen it from this perspective, yet! At first reading, I
thought
>this is simply too good to be true. I mean, there is some sort of list
>structured thing representing the whole record, right? Then how can the
>function that selects an element *not* traverse through the list?
It does. An HList of Int,Bool,Char is isomorphic to the type
(Int,(Bool,(Char,()))), and selecting the Bool element will ultimately
compile to code like this:
case list of
(_,(x,_)) -> ...
It doesn't need to search for the right element at runtime, and it
doesn't need to check for end-of-list at runtime, but it does need to
deconstruct O(n) pairs at runtime. A statically balanced tree structure
would reduce that the O(log n), but I doubt it would improve performance
for typical record sizes.
Of course, inlining may well lead to something like
case (a,(b,(c,()))) of
(_,(x,_)) -> ...
which can be optimized away.
-- Ben
More information about the Haskell
mailing list