| Safe Haskell | Safe-Inferred |
|---|---|
| Language | Haskell98 |
Test.IOSpec.Types
Description
This module contains the basic data types underlying the
IOSpec library. Most of the types and classes in this module
are described in
https://webspace.science.uu.nl/~swier004//publications/2008-jfp.pdf
Synopsis
- data IOSpec (f :: Type -> Type) a
- foldIOSpec :: Functor f => (a -> b) -> (f b -> b) -> IOSpec f a -> b
- data ((f :: Type -> Type) :+: (g :: Type -> Type)) x
- class (Functor sub, Functor sup) => (sub :: Type -> Type) :<: (sup :: Type -> Type)
- inject :: forall g (f :: Type -> Type) a. g :<: f => g (IOSpec f a) -> IOSpec f a
The IOSpec type.
data IOSpec (f :: Type -> Type) 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.
foldIOSpec :: Functor f => (a -> b) -> (f b -> b) -> IOSpec f a -> b Source #
The fold over IOSpec values.
Coproducts of functors
data ((f :: Type -> Type) :+: (g :: Type -> Type)) x infixr 5 Source #
The coproduct of functors
Instances
| (Functor f, Functor g) => f :<: (f :+: g) Source # | |
Defined in Test.IOSpec.Types | |
| (f :<: g, Functor f, Functor g, Functor h) => f :<: (h :+: g) Source # | |
Defined in Test.IOSpec.Types | |
| (Executable f, Executable g) => Executable (f :+: g) Source # | |
| (Functor f, Functor g) => Functor (f :+: g) Source # | |
Injections from one functor to another
class (Functor sub, Functor sup) => (sub :: Type -> Type) :<: (sup :: Type -> Type) Source #
The (:<:) class
Minimal complete definition
inj