unsafeLocalState
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 functions.
The only IO operations allowed in the IO action passed to
unsafeLocalState are (a) local allocation (alloca,
allocaBytes and derived operations such as withArray
and withCString), and (b) pointer operations
(Foreign.Storable and 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.