instance (Ix a, Show a, Show b) => Show (Array a b) where
showsPrec p a =
- showParen (p > 9) $
+ showParen (p > appPrec) $
showString "array " .
- shows (bounds a) .
+ showsPrec appPrec1 (bounds a) .
showChar ' ' .
- shows (assocs a)
+ showsPrec appPrec1 (assocs a)
+ -- Precedence of 'array' is the precedence of application
-- The Read instance is in GHC.Read
\end{code}
-- the '%' operator.
type Rational = Ratio Integer
+ratioPrec, ratioPrec1 :: Int
+ratioPrec = 7 -- Precedence of ':%' constructor
+ratioPrec1 = ratioPrec + 1
+
infinity, notANumber :: Rational
infinity = 1 :% 0
notANumber = 0 :% 0
instance (Integral a) => Show (Ratio a) where
{-# SPECIALIZE instance Show Rational #-}
- showsPrec p (x:%y) = showParen (p > ratio_prec)
- (shows x . showString " % " . shows y)
-
-ratio_prec :: Int
-ratio_prec = 7
+ showsPrec p (x:%y) = showParen (p > ratioPrec) $
+ showsPrec ratioPrec1 x .
+ showString " % " .
+ showsPrec ratioPrec1 y
instance (Integral a) => Enum (Ratio a) where
{-# SPECIALIZE instance Enum Rational #-}
shows, showChar, showString, showParen, showList__, showSpace,
showLitChar, protectEsc,
intToDigit, digitToInt, showSignedInt,
+ appPrec, appPrec1,
-- Character operations
isAscii, isLatin1, isControl, isPrint, isSpace, isUpper,
where
showl [] = ']' : s
showl (y:ys) = ',' : showx y (showl ys)
+
+appPrec, appPrec1 :: Int
+ -- Use unboxed stuff because we don't have overloaded numerics yet
+appPrec = I# 10# -- Precedence of application:
+ -- one more than the maximum operator precedence of 9
+appPrec1 = I# 11# -- appPrec + 1
\end{code}
%*********************************************************
instance Show a => Show (Maybe a) where
showsPrec _p Nothing s = showString "Nothing" s
- showsPrec (I# p#) (Just x) s
- = (showParen (p# >=# 10#) $
+ showsPrec p (Just x) s
+ = (showParen (p > appPrec) $
showString "Just " .
- showsPrec (I# 10#) x) s
+ showsPrec appPrec1 x) s
instance (Show a, Show b) => Show (Either a b) where
- showsPrec (I# p#) e s =
- (showParen (p# >=# 10#) $
+ showsPrec p e s =
+ (showParen (p > appPrec) $
case e of
- Left a -> showString "Left " . showsPrec (I# 10#) a
- Right b -> showString "Right " . showsPrec (I# 10#) b)
+ Left a -> showString "Left " . showsPrec appPrec1 a
+ Right b -> showString "Right " . showsPrec appPrec1 b)
s
-
\end{code}