Generalise the ! and UNPACK mechanism for data types, to unpack function arguments
See this thread:
Briefly the idea is to allow
data T = MkT (!Int -> Bool)
to make a
MkT hold strict functions only. Anyone unpacking a
MkT can assume the function is strict; and anyone building a
MkT gets a strictness wrapper aound whatever function they supply, so even if they supply a lazy function, it's made strict.
Seems like a natural generalisation of the existing strictness and UNPACK mechanism for data types.
Lots of details in the thread above.