{-# OPTIONS_JHC -fno-prelude #-} module Jhc.Inst.Show() where import Jhc.Basics import Jhc.Class.Num import Jhc.Class.Ord import Jhc.Class.Real import Jhc.Show import Jhc.Type.C -- we convert them to Word or WordMax so the showIntAtBase specialization can occur. fromIntegral :: (Integral a, Num b) => a -> b fromIntegral x = fromInteger (toInteger x) instance Show Word where showsPrec _ x = showWord x instance Show Word8 where showsPrec _ x = showWord (fromIntegral x :: Word) instance Show Word16 where showsPrec _ x = showWord (fromIntegral x :: Word) instance Show Word32 where showsPrec _ x = showWord (fromIntegral x :: Word) instance Show Word64 where showsPrec _ x = showWordMax (fromIntegral x :: WordMax) instance Show WordPtr where showsPrec _ x = showWordMax (fromIntegral x :: WordMax) instance Show WordMax where showsPrec _ x = showWordMax x instance Show Int where showsPrec p x | p `seq` x `seq` False = undefined | x < 0 = showParen (p > 6) (showChar '-' . showWord (fromIntegral $ negate x :: Word)) | True = showWord (fromIntegral x :: Word) instance Show Integer where showsPrec p x | p `seq` x `seq` False = undefined | x < 0 = showParen (p > 6) (showChar '-' . showWordMax (fromIntegral $ negate x :: WordMax)) | True = showWordMax (fromIntegral x :: WordMax) instance Show Int8 where showsPrec p x = showsPrec p (fromIntegral x :: Int) instance Show Int16 where showsPrec p x = showsPrec p (fromIntegral x :: Int) instance Show Int32 where showsPrec p x = showsPrec p (fromIntegral x :: Int) instance Show Int64 where showsPrec p x = showsPrec p (fromIntegral x :: Integer) instance Show IntPtr where showsPrec p x = showsPrec p (fromIntegral x :: Integer) instance Show IntMax where showsPrec p x = showsPrec p (fromIntegral x :: Integer) instance Show CSize where showsPrec p x = showsPrec p (fromIntegral x :: Integer) instance Show CInt where showsPrec p x = showsPrec p (fromIntegral x :: Integer) instance Show CLong where showsPrec p x = showsPrec p (fromIntegral x :: Integer) instance Show CLLong where showsPrec p x = showsPrec p (fromIntegral x :: Integer) instance Show CChar where showsPrec p x = showsPrec p (fromIntegral x :: Int) instance Show CSChar where showsPrec p x = showsPrec p (fromIntegral x :: Int) instance Show CUChar where showsPrec _ x = showWord (fromIntegral x :: Word) instance Show CUInt where showsPrec _ x = showWord (fromIntegral x :: Word) instance Show CULong where showsPrec _ x = showWordMax (fromIntegral x :: WordMax) instance Show CULLong where showsPrec _ x = showWordMax (fromIntegral x :: WordMax) instance Show CWchar where showsPrec _ x = showWord (fromIntegral x :: Word) -- specialized base 10 only versions of show showWord :: Word -> String -> String showWord w rest = w `seq` case quotRem w 10 of (n',d) -> n' `seq` d `seq` rest' `seq` if n' == 0 then rest' else showWord n' rest' where rest' = chr (fromIntegral d + ord '0') : rest showWordMax :: WordMax -> String -> String showWordMax w rest = w `seq` case quotRem w 10 of (n',d) -> n' `seq` d `seq` rest' `seq` if n' == 0 then rest' else showWordMax n' rest' where rest' = chr (fromIntegral d + ord '0') : rest