
Yes, I see. Would it be possible to have a standard strict list, i.e. something equivalent of
data SList a = SNil | SCons !a SList
(which could be a member of the same class as the normal lists, and have the usual functions (length, ++, isPrefixOf...) overloaded)?
Unfortuantely, as I understand it the -funbox-strict-fields optimization doesn't apply to polymorphic fields. That is, you get the optimization for:
data SIntList = SINil | SICons !Int SIntList
but not for
type SListOfInt = SList Int
This is because "SList a" must have a uniform representation for every possible a, and the Ints must therefore be boxed. You could verify my instincts by trying this with your example and looking at the space usage... If "strict cons" is what's desired, than it shouldn't be hard to add it as a function and keep lists the way they are. It sounds like what's really wanted is an "unboxed list" class structure similar to the hierarchy of unboxed arrays. That's quite a bit more complicated. -Jan-Willem Maessen
participants (1)
-
Jan-Willem Maessen