Control.Monad.ST.Unsafe

base-4.11.0.0: Basic libraries

Copyright | (c) The University of Glasgow 2001
License | BSD-style (see the file libraries/base/LICENSE)
Maintainer | libraries@haskell.org
Stability | experimental
Portability | non-portable (requires universal quantification for runST)
Safe Haskell | Unsafe
Language | Haskell2010

Control.Monad.ST.Unsafe

Contents

- Unsafe operations

Description

This library provides support for strict state threads, as described in the PLDI '94 paper by John Launchbury and Simon Peyton Jones Lazy Functional State Threads.

Unsafe API.

Synopsis

- unsafeInterleaveST :: ST s a -> ST s a
- unsafeDupableInterleaveST :: 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 Source #

`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.

unsafeDupableInterleaveST :: ST s a -> ST s a Source #

`unsafeDupableInterleaveST` 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.

The computation may be performed multiple times by different threads, possibly at the same time. To prevent this, use `unsafeInterleaveST` instead.

Since: base-4.11

unsafeIOToST :: IO a -> ST s a Source #

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

unsafeSTToIO :: ST s a -> IO a Source #

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

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