`ForeignPtr` should be strict in `ForeignPtrContents`
Right now ForeignPtr
is defined as
data ForeignPtr a = ForeignPtr Addr# ForeignPtrContents
data ForeignPtrContents
= PlainForeignPtr !(IORef Finalizers)
| MallocPtr (MutableByteArray# RealWorld) !(IORef Finalizers)
| PlainPtr (MutableByteArray# RealWorld)
ForeignPtrContents
is strict in all its fields, but ForeignPtr
is lazy in the ForeignPtrContents
. That should probably not be the case (or, if it should, we should document why).
Edited by edsko@edsko.net