reallyUnsafe
Compare the underlying pointers of two values for equality.
Returns
1 if the pointers are equal and
0 otherwise.
The two values must be of the same type, of kind
Type. See
also
reallyUnsafePtrEquality#, which doesn't have such
restrictions.
Utility for lifting
IO computations of type
IO a -> IO b
to
Eff es a -> Eff es b
This function is
really unsafe because:
- It can be used to introduce arbitrary IO actions into pure
Eff computations.
- The IO computation must run its argument in a way that's
perceived as sequential to the outside observer, e.g. in the same
thread or in a worker thread that finishes before the argument is run
again.
Warning: if you disregard the second point, you will experience
weird bugs, data races or internal consistency check failures.
When in doubt, use
unsafeLiftMapIO, especially since this
version saves only a simple safety check per call of
reallyUnsafeLiftMapIO f.
Create an unlifting function.
This function is
really unsafe because:
- It can be used to introduce arbitrary IO actions into pure
Eff computations.
- Unlifted Eff computations must be run in a way that's
perceived as sequential to the outside observer, e.g. in the same
thread as the caller of reallyUnsafeUnliftIO or in a worker
thread that finishes before another unlifted computation is run.
Warning: if you disregard the second point, you will experience
weird bugs, data races or internal consistency check failures.
When in doubt, use
unsafeSeqUnliftIO, especially since this
version saves only a simple safety check per call of the unlifting
function.
A coercion between two
Refined types, magicking up the claim
that one predicate is entirely equivalent to another.
Constructs a
Refined value, completely ignoring any
refinements! Use this only when you can manually prove that the
refinement holds.
A coercion between a type and any refinement of that type. See
Data.Type.Coercion for functions manipulating coercions.
Warning: This function may violate type safety. Use with care!