But you seem to be saying that
freeStablePtr (castPtrToStablePtr Ptr.nullPtr)
is meaningful... which part of the spec implies that?
Aha! I was reading the last sentence of the freeStablePtr description as though it applied to freeStablePtr when in fact it means that castStablePtrToPtr is guaranteed not to diverge. Well that's a lot easier to implement. btw What am I to make of the parenthetical remark (in particular it may be Ptr.nullPtr) Should I read that as a recommendation to implementors that when casting a stableptr which has already been freed then they should return nullPtr? If so, is this required or just hinted/recommended?
Either 'ErrorCall "Foreign.StablePtr.deRefStablePtr: invalid stable pointer"', or a new exception. I don't mind which.
I'll pick one and add my choice to the spec then. -- Alastair Reid reid@cs.utah.edu http://www.cs.utah.edu/~reid/