{-# LANGUAGE UnboxedSums #-}
{-# LANGUAGE UnboxedTuples #-}
{-# LANGUAGE UnliftedNewtypes #-}
{-# OPTIONS_GHC -Wno-orphans #-}
module Debug.TraceEmbrace.Show (module STh, module B) where
import Debug.TraceEmbrace.ByteString as B
import Debug.TraceEmbrace.ShowTh as STh
import GHC.Exts
import Prelude hiding (Show (..))
import Prelude qualified as P
instance Show Int# where
show :: Int# -> String
show Int#
i# = Int -> String
forall a. Show a => a -> String
P.show (Int# -> Int
I# Int#
i#) String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"#"
instance Show Float# where
show :: Float# -> String
show Float#
i# = Float -> String
forall a. Show a => a -> String
P.show (Float# -> Float
F# Float#
i#) String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"#"
instance Show Char# where
show :: Char# -> String
show Char#
i# = Char -> String
forall a. Show a => a -> String
P.show (Char# -> Char
C# Char#
i#) String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"#"
instance Show Word# where
show :: Word# -> String
show Word#
i# = Word -> String
forall a. Show a => a -> String
P.show (Word# -> Word
W# Word#
i#) String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"#"
instance Show Double# where
show :: Double# -> String
show Double#
i# = Double -> String
forall a. Show a => a -> String
P.show (Double# -> Double
D# Double#
i#) String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"#"
instance Show Addr# where
show :: Addr# -> String
show Addr#
i# = Ptr () -> String
forall a. Show a => a -> String
P.show (forall a. Addr# -> Ptr a
Ptr @() Addr#
i#) String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
"#"
instance Show (# #) where
show :: (# #) -> String
show (# #)
_ = String
"(# #)"
instance (Show a#) => Show (# a# #) where
show :: (# a# #) -> String
show (# a#
a# #) = String
"(# " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> a# -> String
forall t. Show t => t -> String
show a#
a# String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" #)"
$(let utypes = [''Int#, ''Char#, ''Double#, ''Float#, ''Addr#]
in concat <$> sequence [ deriveShowTuple1 ut | ut <- utypes ])
instance (Show a, Show b) => Show (# a, b #) where
show :: (# a, b #) -> String
show (# a
a#, b
b# #) = String
"(# " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> a -> String
forall t. Show t => t -> String
show a
a# String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
", " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> b -> String
forall t. Show t => t -> String
show b
b# String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" #)"
$(concat <$> sequence [ deriveShowTuple2 ut ut' | ut <- unTypes, ut' <- unTypes ])
$(concat <$> sequence [ deriveShowSum2 ut ut' | ut <- unTypes, ut' <- unTypes ])
instance (Show a, Show b, Show c) => Show (# a, b, c #) where
show :: (# a, b, c #) -> String
show (# a
a, b
b, c
c #) = String
"(# " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> a -> String
forall t. Show t => t -> String
show a
a String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
", " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> b -> String
forall t. Show t => t -> String
show b
b String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
", " String -> String -> String
forall a. Semigroup a => a -> a -> a
<> c -> String
forall t. Show t => t -> String
show c
c String -> String -> String
forall a. Semigroup a => a -> a -> a
<> String
" #)"
$(concat <$> sequence [ deriveShowTuple3 ut ut' ut'' | ut <- unTypes, ut' <- unTypes, ut'' <- unTypes ])
$(concat <$> sequence [ deriveShowSum3 ut ut' ut'' | ut <- unTypes, ut' <- unTypes, ut'' <- unTypes ])
instance {-# OVERLAPPABLE #-} P.Show a => Show a where
show :: a -> String
show = a -> String
forall a. Show a => a -> String
P.show