Portability | portable |
---|---|
Stability | provisional |
Maintainer | ffi@haskell.org |
Utilities for primitive marshaling
- with :: Storable a => a -> (Ptr a -> IO b) -> IO b
- new :: Storable a => a -> IO (Ptr a)
- fromBool :: Num a => Bool -> a
- toBool :: Num a => a -> Bool
- maybeNew :: (a -> IO (Ptr a)) -> Maybe a -> IO (Ptr a)
- maybeWith :: (a -> (Ptr b -> IO c) -> IO c) -> Maybe a -> (Ptr b -> IO c) -> IO c
- maybePeek :: (Ptr a -> IO b) -> Ptr a -> IO (Maybe b)
- withMany :: (a -> (b -> res) -> res) -> [a] -> ([b] -> res) -> res
- copyBytes :: Ptr a -> Ptr a -> Int -> IO ()
- moveBytes :: Ptr a -> Ptr a -> Int -> IO ()
General marshalling utilities
Combined allocation and marshalling
with :: Storable a => a -> (Ptr a -> IO b) -> IO bSource
executes the computation with
val ff
, passing as argument
a pointer to a temporarily allocated block of memory into which
val
has been marshalled (the combination of alloca
and poke
).
The memory is freed when f
terminates (either normally or via an
exception), so the pointer passed to f
must not be used after this.
new :: Storable a => a -> IO (Ptr a)Source
Allocate a block of memory and marshal a value into it
(the combination of malloc
and poke
).
The size of the area allocated is determined by the Foreign.Storable.sizeOf
method from the instance of Storable
for the appropriate type.
The memory may be deallocated using Foreign.Marshal.Alloc.free
or
Foreign.Marshal.Alloc.finalizerFree
when no longer required.
Marshalling of Boolean values (non-zero corresponds to True
)
Marshalling of Maybe values
Marshalling lists of storable objects
withMany :: (a -> (b -> res) -> res) -> [a] -> ([b] -> res) -> resSource
Replicates a withXXX
combinator over a list of objects, yielding a list of
marshalled objects
Haskellish interface to memcpy and memmove
(argument order: destination, source)