Comparing [Fun]Ptrs

Volker Stolz vs at
Tue Mar 4 05:35:16 EST 2003

Hi, I'm looking for a way of comparing Ptrs to null *elegantly*.
The FFI distinguishes between 'Ptr a' and 'FunPtr a', so testing
would mean writing ((==) null[Fun]Ptr). This is rather tedious and a predicate
'isNull' might be in order so that it's possible to write

   when (isNull p) $ ...
   throwIOErrorIf isNull ...
, especially without having to worry about comparing against the correct
null pointer (FunPtr or Ptr). That's something where a class can help, but
I'm not sure whether such a specialised class is desired...

I'd like to add the following class and instances/functions to Foreign.Ptr
if nobody objects, they'd make code much more readable and concise:

class ToPtr a where
   toPtr :: a -> Ptr b

isNull :: ToPtr a => a -> Bool
isNull = (==) nullPtr . toPtr

The ToPtr class was suggested my Simon M. in favour of an even more specialised
class PtrCmp which just has nullPtr :: PtrCmp a => isNull a -> Bool.
Volker Stolz * * PGP * S/MIME

More information about the FFI mailing list