module Debug.TraceEmbrace.Internal.Rewrap where

import GHC.Exts

-- | Unlifted value wrapper to be squize throughout trace function
class Rewrap (t :: TYPE r) b | t -> b where
  wrap :: t -> b
  unwrap :: b -> t

instance Rewrap Int# Int where
  wrap :: Int# -> Int
wrap = Int# -> Int
I#
  unwrap :: Int -> Int#
unwrap (I# Int#
x#) = Int#
x#

instance Rewrap Double# Double where
  wrap :: Double# -> Double
wrap = Double# -> Double
D#
  unwrap :: Double -> Double#
unwrap (D# Double#
x#) = Double#
x#

instance Rewrap Float# Float where
  wrap :: Float# -> Float
wrap = Float# -> Float
F#
  unwrap :: Float -> Float#
unwrap (F# Float#
x#) = Float#
x#

instance Rewrap Addr# (Ptr ()) where
  wrap :: Addr# -> Ptr ()
wrap = Addr# -> Ptr ()
forall a. Addr# -> Ptr a
Ptr
  unwrap :: Ptr () -> Addr#
unwrap (Ptr Addr#
x#) = Addr#
x#

instance Rewrap Char# Char where
  wrap :: Char# -> Char
wrap = Char# -> Char
C#
  unwrap :: Char -> Char#
unwrap (C# Char#
x#) = Char#
x#

instance Rewrap Word# Word where
  wrap :: Word# -> Word
wrap = Word# -> Word
W#
  unwrap :: Word -> Word#
unwrap (W# Word#
x#) = Word#
x#

instance Rewrap a a where
  wrap :: a -> a
wrap = a -> a
forall a. a -> a
id
  unwrap :: a -> a
unwrap = a -> a
forall a. a -> a
id