HOpenCV-0.1: src/Foreign/ForeignPtrWrap.hs
module Foreign.ForeignPtrWrap where
import Foreign.Ptr
import Foreign.ForeignPtr
import System.IO.Error
-- A wrapper for newForeignPtr that handles nullPtrs, and can be chained to an IO Ptr creator.
-- usage:
-- myPtrCreator = (createForeignPtr deallocFunc) . allocFunc
-- where, allocFunc :: a->b->c->...-> IO (Ptr z)
createForeignPtr :: (FunPtr (Ptr a -> IO () )) -> IO (Ptr a) -> IO (ForeignPtr a)
createForeignPtr dealloc allocedPtr = do
ptr <- checkPtr allocedPtr
newForeignPtr dealloc ptr
checkPtr :: IO (Ptr a) -> IO (Ptr a)
checkPtr x = do
res <- x
if res /= nullPtr
then return res
else fail "Null Pointer"
------------------------------------------------
errorName :: String -> IO a -> IO a
errorName = modifyIOError . const . userError