ref: cc5f799ee6b51ce2859a74dbcd36b484d805732c
dir: /tests/ForeignPtr.hs/
module ForeignPtr(main) where
import Foreign.Ptr
import Foreign.ForeignPtr
import Foreign.Storable
gc :: IO ()
gc = primitive "IO.gc"
add :: Ptr a -> Int -> Ptr a
add = plusPtr
sInt :: Int
sInt = sizeOf (0::Int)
main :: IO ()
main = do
fp <- mallocForeignPtrArray 2
withForeignPtr fp $ \ p -> do
poke p (42::Int)
poke (add p sInt) (88::Int)
withForeignPtr fp $ \ p -> do
gc
peek p >>= print
peek (add p sInt) >>= print
let fp1 :: ForeignPtr Int
fp1 = plusForeignPtr fp sInt
withForeignPtr fp1 $ \ p -> do
peek p >>= print
gc