shithub: MicroHs

ref: 5f1eafa05adeb65e2cd1f6db83d9cbd88c2cb0d9
dir: /tests/ForeignPtr.hs/

View raw version
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