base-4.20.2.0: Core data structures and operations

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

Control.Monad.ST.Unsafe

Contents

- Unsafe operations

Description

This module 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 state thread type parameter.

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 state thread type parameter.

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