open-witness-0.6: open witnesses
Safe HaskellNone
LanguageHaskell2010

Data.Type.OpenWitness

Synopsis

Documentation

data OpenWitness a (b :: 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

Instances details
TestEquality (OpenWitness s :: k -> Type) Source # 
Instance details

Defined in Data.Type.OpenWitness

Methods

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

TestOrder (OpenWitness s :: k -> Type) Source # 
Instance details

Defined in Data.Type.OpenWitness

Methods

testCompare :: forall (a :: k) (b :: k). OpenWitness s a -> OpenWitness s b -> WOrdering a b #

TestHetEquality (OpenWitness s) Source # 
Instance details

Defined in Data.Type.OpenWitness

Methods

testHetEquality :: forall ka (a :: ka) kb (b :: kb). OpenWitness s a -> OpenWitness s b -> Maybe (a :~~: b) #

Eq (OpenWitness s a) Source # 
Instance details

Defined in Data.Type.OpenWitness

Methods

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

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

data RealWorld Source #

The s type for running OW in IO.

newIOWitness :: forall {k} (a :: k). IO (IOWitness a) Source #

Generate a new IOWitness in IO.

data OW (s :: k) 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

Instances details
MonadFix (OW s) Source # 
Instance details

Defined in Data.Type.OpenWitness

Methods

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

Applicative (OW s) Source # 
Instance details

Defined in Data.Type.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 #

Functor (OW s) Source # 
Instance details

Defined in Data.Type.OpenWitness

Methods

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

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

Monad (OW s) Source # 
Instance details

Defined in Data.Type.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 #

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

Generate a new OpenWitness in OW.

runOW :: (forall (s :: k). 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.

hashOpenWitness :: forall {k} t s (a :: k). Hashable t => OpenWitness s a -> t -> OpenWitness s a Source #