Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Traditionally, there were only a few basic unlifted types available in
GHC, all of them primitive. Now, with the UnliftedNewtypes
and
UnliftedDatatypes
extensions, users are free to create as many as they
like. However, many essential facilities, like the Monad
class, still work
only with lifted types, so users must wrap their unlifted types into lifted
ones to use those. If the wrapped version of a type is likely to be used
heavily on its own, it often makes sense to write a custom wrapper type for
it. This module exports a general box for situations where the focus should
be on the unlifted type rather than its wrapper.
Synopsis
- data Box (a :: UnliftedType) = Box# {
- unBox# :: a
- toBox :: PrimUnlifted a => a -> Box (Unlifted a)
- fromBox :: PrimUnlifted a => Box (Unlifted a) -> a
Documentation
data Box (a :: UnliftedType) Source #
Turn an arbitrary unlifted type into a lifted one with a PrimUnlifted
instance. For example, given
data UnliftedMaybe a :: UnliftedType where UnliftedNothing :: UnliftedMaybe a UnliftedJust :: a -> UnliftedMaybe a
we have
Box (UnliftedMaybe a) :: Type
Instances
PrimUnlifted (Box a) Source # | |
Defined in Data.Primitive.Unlifted.Box type Unlifted (Box a) :: UnliftedType Source # | |
type Unlifted (Box a) Source # | |
Defined in Data.Primitive.Unlifted.Box |