open-witness-0.4.0.1: open witnesses

Safe HaskellNone
LanguageHaskell2010

Data.OpenWitness

Synopsis

Documentation

data OpenWitness :: * -> forall k. k -> * Source #

A witness type that can witness to any type. But values cannot be constructed; they can only be generated in IO and certain other monads.

Instances

TestEquality k (OpenWitness s k) Source # 

Methods

testEquality :: f a -> f b -> Maybe ((OpenWitness s k :~: a) b) #

TestHetEquality (OpenWitness s) Source # 

Methods

testHetEquality :: OpenWitness s ka a -> OpenWitness s kb b -> Maybe (HetEq kb ka a b) Source #

Eq (OpenWitness s k a) Source # 

Methods

(==) :: OpenWitness s k a -> OpenWitness s k a -> Bool #

(/=) :: OpenWitness s k a -> OpenWitness s k a -> Bool #

data RealWorld Source #

The s type for running OW in IO.

newIOWitness :: forall a. IO (IOWitness a) Source #

Generate a new IOWitness in IO.

data OW s a Source #

A runnable monad in which OpenWitness values can be generated. The s parameter plays the same role as it does in ST, preventing OpenWitness values from one run being used in another.

Instances

Monad (OW k s) Source # 

Methods

(>>=) :: OW k s a -> (a -> OW k s b) -> OW k s b #

(>>) :: OW k s a -> OW k s b -> OW k s b #

return :: a -> OW k s a #

fail :: String -> OW k s a #

Functor (OW k s) Source # 

Methods

fmap :: (a -> b) -> OW k s a -> OW k s b #

(<$) :: a -> OW k s b -> OW k s a #

MonadFix (OW k s) Source # 

Methods

mfix :: (a -> OW k s a) -> OW k s a #

Applicative (OW k s) Source # 

Methods

pure :: a -> OW k s a #

(<*>) :: OW k s (a -> b) -> OW k s a -> OW k s b #

(*>) :: OW k s a -> OW k s b -> OW k s b #

(<*) :: OW k s a -> OW k s b -> OW k s a #

newOpenWitnessOW :: forall s a. OW s (OpenWitness s a) Source #

Generate a new OpenWitness in OW.

runOW :: forall a. (forall s. OW s a) -> a Source #

Run an OW computation.

owToIO :: OW RealWorld a -> IO a Source #

Run an OW computation in IO.

iowitness :: TypeQ -> Q Exp Source #

Template Haskell function to declare IOWitness values.