IOSpec: A pure specification of the IO monad.

[ bsd3, library, testing ] [ Propose Tags ]

This package consists of several modules, that give a pure specification of functions in the IO monad: * Test.IOSpec.Fork: a pure specification of forkIO. * Test.IOSpec.IORef: a pure specification of most functions that create and manipulate on IORefs. * Test.IOSpec.MVar: a pure specification of most functions that create and manipulate and MVars. * Test.IOSpec.STM: a pure specification of atomically and the STM monad. * Test.IOSpec.Teletype: a pure specification of getChar, putChar, and several related Prelude functions. Besides these modules containing the specifications, there are a few other important modules: * Test.IOSpec.Types: defines the IOSpec type and several amenities. * Test.IOSpec.VirtualMachine: defines a virtual machine on which to execute pure specifications. * Test.IOSpec.Surrogate: a drop-in replacement for the other modules. Import this and recompile your code once you've finished testing and debugging. There are several well-documented examples included with the source distribution.

[Skip to Readme]
Versions 0.1, 0.1.1, 0.2, 0.2.1, 0.2.2, 0.2.3, 0.2.4, 0.2.5, 0.2.6, 0.3, 0.3.1
Dependencies base (>= && <5), mtl, QuickCheck (==2.*), Stream [details]
License BSD-3-Clause
Author Wouter Swierstra, Yusaku Hashimoto, Nikolay Amiantov
Maintainer Wouter Swierstra <>
Category Testing
Uploaded by WouterSwierstra at Mon Oct 29 08:05:27 UTC 2018
Distributions Debian:0.3, Fedora:0.3, NixOS:0.3.1
Downloads 6885 total (53 in the last 30 days)
Rating (no votes yet) [estimated by rule of succession]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2018-10-29 [all 1 reports]
Hackage Matrix CI


[Index] [Quick Jump]


Maintainer's Corner

For package maintainers and hackage trustees

Readme for IOSpec-0.3.1

[back to package description]
IOSpec version 0.2
  Author: Wouter Swierstra <>

IOSpec provides a library containing pure, executable specifications
of a few functions from the IO monad. 

Build instructions:

    $ runhaskell Setup.lhs configure
    $ runhaskell Setup.lhs build
    $ runhaskell Setup.lhs install

for more instructions.


Please have a look at the latest documentation available from:

To build the Haddock API execute the following command:
    $ runhaskell Setup.lhs haddock

This will require Haddock 2.0

Check out the examples directory for the following examples:

    * Echo.hs - illustrates how to test the echo function.
    * Queues.hs - an implementation of queues using IORefs.
    * Channels.hs - an implementation of channels using MVars.
    * Sudoku.hs - a parallel Sudoku solver that uses STM and MVars
         based on Graham Hutton's version of Richard Bird's "Solving Sudoku".

Every example contains quite some comments, explaining how to use
the library.