Curried use of strict ?Just causes segmentation fault
For example, this causes a segmentation fault on the current x64 nightly:
import StdEnv f :: (Int -> ?Int) f = ?Just o ((+) 5) Start = f 1
Whereas this works fine with a custom ADT:
:: M a = J !a g :: (Int -> M Int) g = J o ((+) 5) Start = g 1
f = (\x -> ?Just x) o ((+) 5) works fine.
?Just should be defined as a
.record in _system.abc, with the corresponding lazy entry for currying, as is done with strict lists and constructors.
Finally, I'm not sure whether it is related or not, but
f = ?Just results in a lazy
?^Just being created:
f :: (Int -> ?Int) f = ?Just Start = f 1