open-witness-0.4.0.1: open witnesses

Safe HaskellNone
LanguageHaskell2010

Data.OpenWitness

Synopsis

Documentation

data OpenWitness :: * -> forall (k :: *). k -> * #

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 (OpenWitness s k :: k -> *) # 
Instance details

Defined in Data.OpenWitness

Methods

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

TestHetEquality (OpenWitness s) # 
Instance details

Defined in Data.OpenWitness

Methods

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

Eq (OpenWitness s k a) # 
Instance details

Defined in Data.OpenWitness

Methods

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

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

data RealWorld #

The s type for running OW in IO.

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

Generate a new IOWitness in IO.

data OW s a #

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 s) # 
Instance details

Defined in Data.OpenWitness

Methods

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

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

return :: a -> OW s a #

fail :: String -> OW s a #

Functor (OW s) # 
Instance details

Defined in Data.OpenWitness

Methods

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

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

MonadFix (OW s) # 
Instance details

Defined in Data.OpenWitness

Methods

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

Applicative (OW s) # 
Instance details

Defined in Data.OpenWitness

Methods

pure :: a -> OW s a #

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

liftA2 :: (a -> b -> c) -> OW s a -> OW s b -> OW s c #

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

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

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

Generate a new OpenWitness in OW.

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

Run an OW computation.

owToIO :: OW RealWorld a -> IO a #

Run an OW computation in IO.

iowitness :: TypeQ -> Q Exp #

Template Haskell function to declare IOWitness values.