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

Safe HaskellSafe
LanguageHaskell98

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) Source # 

Methods

(>>=) :: IOSpec f a -> (a -> IOSpec f b) -> IOSpec f b #

(>>) :: IOSpec f a -> IOSpec f b -> IOSpec f b #

return :: a -> IOSpec f a #

fail :: String -> IOSpec f a #

Functor f => Functor (IOSpec f) Source # 

Methods

fmap :: (a -> b) -> IOSpec f a -> IOSpec f b #

(<$) :: a -> IOSpec f b -> IOSpec f a #

Functor f => Applicative (IOSpec f) Source # 

Methods

pure :: a -> IOSpec f a #

(<*>) :: IOSpec f (a -> b) -> IOSpec f a -> IOSpec f b #

liftA2 :: (a -> b -> c) -> IOSpec f a -> IOSpec f b -> IOSpec f c #

(*>) :: IOSpec f a -> IOSpec f b -> IOSpec f b #

(<*) :: IOSpec f a -> IOSpec f b -> IOSpec f a #

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

The fold over IOSpec values.

Coproducts of functors

data (f :+: g) x infixr 5 Source #

The coproduct of functors

Constructors

Inl (f x) 
Inr (g x) 

Instances

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

Methods

inj :: f a -> (h :+: g) a

(Functor f, Functor g) => f :<: ((:+:) f g) Source # 

Methods

inj :: f a -> (f :+: g) a

(Functor f, Functor g) => Functor ((:+:) f g) Source # 

Methods

fmap :: (a -> b) -> (f :+: g) a -> (f :+: g) b #

(<$) :: a -> (f :+: g) b -> (f :+: g) a #

(Executable f, Executable g) => Executable ((:+:) f g) Source # 

Methods

step :: (f :+: g) a -> VM (Step a) Source #

Injections from one functor to another

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

The (:<:) class

Minimal complete definition

inj

Instances

Functor f => f :<: f Source # 

Methods

inj :: f a -> f a

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

Methods

inj :: f a -> (h :+: g) a

(Functor f, Functor g) => f :<: ((:+:) f g) Source # 

Methods

inj :: f a -> (f :+: g) a

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