prim-uniq-0.1.0.1: Opaque unique identifiers in primitive state monads

Data.Unique.Prim

Synopsis

Documentation

data Uniq s Source

A Uniq is a value that can only be constructed under controlled conditions (in IO or ST, basically), and once constructed can only be compared to Uniq values created under the same conditions (in the same monad). Upon comparison, a Uniq is ONLY ever equal to itself. Beyond that, no promises regarding ordering are made except that once constructed the order is deterministic and a proper ordering relation (eg, > is transitive and irreflexive, etc.)

Instances

Eq (Uniq s) 
Ord (Uniq s) 
Show (Uniq RealWorld)

There is only one RealWorld, so this instance is sound (unlike the general unsafeShowsPrecUniq). Note that there is no particular relationship between Uniq values (or the strings show turns them into) created in different executions of a program. The value they render to should be considered completely arbitrary, and the Show instance only even exists for convenience when testing code that uses Uniqs.

getUniq :: PrimMonad m => m (Uniq (PrimState m))Source

Construct a new Uniq that is equal to itself, unequal to every other Uniq constructed in the same monad, and incomparable to every Uniq constructed in any other monad.

data RealWorld

RealWorld is deeply magical. It is primitive, but it is not unlifted (hence ptrArg). We never manipulate values of type RealWorld; it's only used in the type system, to parameterise State#.

Instances

Show (Uniq RealWorld)

There is only one RealWorld, so this instance is sound (unlike the general unsafeShowsPrecUniq). Note that there is no particular relationship between Uniq values (or the strings show turns them into) created in different executions of a program. The value they render to should be considered completely arbitrary, and the Show instance only even exists for convenience when testing code that uses Uniqs.

GShow (Tag RealWorld) 
Show (Tag RealWorld a)