The module Foreign.Marshal re-exports the safe content in the
and provides one function:
Sometimes an external entity is a pure function, except that it passes
arguments and/or results via pointers. The function
unsafeLocalState permits the packaging of such entities as pure
The only IO operations allowed in the IO action passed to
unsafeLocalState are (a) local allocation (
and derived operations such as
withCString), and (b)
pointer operations (
Foreign.Ptr) on the
pointers to local storage, and (c) foreign functions whose only
observable effect is to read and/or write the locally allocated
memory. Passing an IO operation that does not obey these rules
results in undefined behaviour.
It is expected that this operation will be replaced in a future revision of Haskell.