Copyright | (c) 2009 2010 2011 Bryan O'Sullivan |
---|---|
License | BSD-style |
Maintainer | bos@serpentine.com |
Stability | experimental |
Portability | portable |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
Warning: this is an internal module, and does not have a stable API or name. Functions in this module may not check or enforce preconditions expected by public modules. Use at your own risk!
A module containing unsafe operations, for very very careful use in heavily tested code.
Synopsis
- inlineInterleaveST :: ST s a -> ST s a
- inlinePerformIO :: IO a -> a
- unsafeWithForeignPtr :: ForeignPtr a -> (Ptr a -> IO b) -> IO b
Documentation
inlineInterleaveST :: ST s a -> ST s a Source #
Allow an ST
computation to be deferred lazily. When passed an
action of type ST
s
a
, the action will only be performed when
the value of a
is demanded.
This function is identical to the normal unsafeInterleaveST, but is inlined and hence faster.
Note: This operation is highly unsafe, as it can introduce
externally visible non-determinism into an ST
action.
inlinePerformIO :: IO a -> a Source #
Just like unsafePerformIO, but we inline it. Big performance gains as
it exposes lots of things to further inlining. Very unsafe. In
particular, you should do no memory allocation inside an
inlinePerformIO
block.
unsafeWithForeignPtr :: ForeignPtr a -> (Ptr a -> IO b) -> IO b Source #