Data marshal and stable pointers

The Haskell types Ptr a and FunPtr a represent pointers in foreign, raw memory (outside the Haskell heap). Relevant operations on foreign pointers are provided by the Storable type class, which has instances for primitive marshallable data types. A third pointer type is StablePtr a, which is a pointer to an object in the Haskell heap.

On top of passing primitive values and pointers through the FFI, almost arbitrary data can be marshalled between Haskell and C (and by extension other languages) relatively easily.

Allocating memory outside the heap

A centric type-class in marshalling is Foreign.Storable.Storable. Storable types must provide a length, byte alignment, and the methods peek and poke:

class Storable a where ...

Get Haskell High Performance Programming now with the O’Reilly learning platform.

O’Reilly members experience books, live events, courses curated by job role, and more from O’Reilly and nearly 200 top publishers.