I'm not sure if I understand exactly what is the current limitation.
Is the main point of this to create something like [!a] ? (ok not really - it's about parts of "a" being strict) Is it just the current syntax / spec limitation that we can't do this? Can it be safely ported in this or some other way into the standard list implementation?
Hmm. No, its not about making it strict -- (!) already does that. It is about changing the representation entirely, so that you get specialized code and data for every different type, rather than reusing slower, general purpose functions.
The code examples show the different, as do the pictures of the heap.
This is some kind of extremely aggressive, but uniform, specialization.
Ok - I get it now. Sadly, I expected that type of optimisation to already take place in GHC, which is why I was confused about what do they do differently. But I see why that's hard now...
Is the main point of this to create something like [!a] ? (ok not really - it's about parts of "a" being strict) Is it just the current syntax / spec limitation that we can't do this? Can it be safely ported in this or some other way into the standard list implementation?