Control.Monad.ST.Unsafe.Compat

base-compat-0.12.2: A compatibility layer for base

Safe Haskell | Safe-Inferred
Language | Haskell2010

Control.Monad.ST.Unsafe.Compat

Contents

- Unsafe operations

Synopsis

- unsafeInterleaveST :: ST s a -> ST s a
- unsafeIOToST :: IO a -> ST s a
- unsafeSTToIO :: ST s a -> IO a

# Unsafe operations

unsafeInterleaveST :: ST s a -> ST s a #

`unsafeInterleaveST` allows an `ST` computation to be deferred lazily. When passed a value of type `ST a`, the `ST` computation will only be performed when the value of the `a` is demanded.

unsafeIOToST :: IO a -> ST s a #

Convert an `IO` action to an `ST` action. This relies on `IO` and `ST` having the same representation modulo the constraint on the state thread type parameter.

unsafeSTToIO :: ST s a -> IO a #

Convert an `ST` action to an `IO` action. This relies on `IO` and `ST` having the same representation modulo the constraint on the state thread type parameter.

For an example demonstrating why this is unsafe, see https://mail.haskell.org/pipermail/haskell-cafe/2009-April/060719.html