{-# language KindSignatures #-}
{-# language TypeFamilies #-}
{-# language MagicHash #-}
{-# language DataKinds #-}
module Data.Primitive.Unlifted.Box where
import Data.Primitive.Unlifted.Class
import Data.Primitive.Unlifted.Type
data Box (a :: UnliftedType) = Box# { forall (a :: UnliftedType). Box a -> a
unBox# :: a }
instance PrimUnlifted (Box a) where
{-# INLINE toUnlifted# #-}
{-# INLINE fromUnlifted# #-}
type Unlifted (Box a) = a
toUnlifted# :: Box a -> Unlifted (Box a)
toUnlifted# (Box# a
a) = a
Unlifted (Box a)
a
fromUnlifted# :: Unlifted (Box a) -> Box a
fromUnlifted# Unlifted (Box a)
a = a -> Box a
forall (a :: UnliftedType). a -> Box a
Box# a
Unlifted (Box a)
a
toBox :: PrimUnlifted a => a -> Box (Unlifted a)
toBox :: forall a. PrimUnlifted a => a -> Box (Unlifted a)
toBox a
a = Unlifted a -> Box (Unlifted a)
forall (a :: UnliftedType). a -> Box a
Box# (a -> Unlifted a
forall a. PrimUnlifted a => a -> Unlifted a
toUnlifted# a
a)
fromBox :: PrimUnlifted a => Box (Unlifted a) -> a
fromBox :: forall a. PrimUnlifted a => Box (Unlifted a) -> a
fromBox (Box# Unlifted a
a) = Unlifted a -> a
forall a. PrimUnlifted a => Unlifted a -> a
fromUnlifted# Unlifted a
a