effin-0.3.0.3: A Typeable-free implementation of extensible effects

Safe HaskellNone
LanguageHaskell2010

Control.Effect.Witness

Synopsis

Documentation

class MemberEffect Witness (Witness s) l => EffectWitness s l Source #

Instances

data Witness s a Source #

An effect describing the generation of unique identifiers.

Instances

type Is (* -> * -> *) Witness f Source # 
type Is (* -> * -> *) Witness f

runWitness :: (forall s. Effect (Witness s :+ l) a) -> Effect l a Source #

Completely handles a Witness effect. The Rank-2 quantifier ensures that unique identifiers cannot escape the context in which they were created.

data Token s a Source #

A unique identifier associated with a type a. If two tokens are equal, then so are their associated types. Use testEquality to safely cast between types.

Instances

TestEquality * (Token s) Source # 

Methods

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

Eq (Token s a) Source # 

Methods

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

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

newToken :: EffectWitness s l => Effect l (Token s a) Source #

Generates a new, unique Token.