IOSpec-0.2.5: A pure specification of the IO monad.

Safe HaskellNone

Test.IOSpec.Types

Contents

Description

This module contains the basic data types underlying the IOSpec library. Most of the types and classes in this module are described in http://www.cs.nott.ac.uk/~wss/Publications/DataTypesALaCarte.pdf.

Synopsis

The IOSpec type.

data IOSpec f a Source

A value of type IOSpec f a is either a pure value of type a or some effect, determined by f. Crucially, IOSpec f is a monad, provided f is a functor.

Constructors

Pure a 
Impure (f (IOSpec f a)) 

Instances

Functor f => Monad (IOSpec f) 
Functor f => Functor (IOSpec f) 

foldIOSpec :: Functor f => (a -> b) -> (f b -> b) -> IOSpec f a -> bSource

The fold over IOSpec values.

Coproducts of functors

data (f :+: g) x Source

The coproduct of functors

Constructors

Inl (f x) 
Inr (g x) 

Instances

(:<: f g, Functor f, Functor g, Functor h) => f :<: (:+: h g) 
(Functor f, Functor g) => f :<: (:+: f g) 
(Functor f, Functor g) => Functor (:+: f g) 
(Executable f, Executable g) => Executable (:+: f g) 

Injections from one functor to another

class (Functor sub, Functor sup) => sub :<: sup Source

The (:<:) class

Instances

Functor f => f :<: f 
(:<: f g, Functor f, Functor g, Functor h) => f :<: (:+: h g) 
(Functor f, Functor g) => f :<: (:+: f g) 

inject :: g :<: f => g (IOSpec f a) -> IOSpec f aSource