1module Darcs.Patch.Witnesses.Show 2 ( Show1(..) 3 , Show2(..) 4 , show1 5 , showsPrec1 6 , show2 7 , showsPrec2 8 , showOp2 9 , appPrec 10 ) where 11 12import Darcs.Prelude 13 14import Darcs.Util.Show ( appPrec ) 15 16import Data.Constraint ( Dict(..) ) 17 18type ShowDict a = Dict (Show a) 19 20showsPrecD :: ShowDict a -> Int -> a -> ShowS 21showsPrecD Dict = showsPrec 22 23showD :: ShowDict a -> a -> String 24showD Dict = show 25 26class Show1 a where 27 showDict1 :: Dict (Show (a wX)) 28 default showDict1 :: Show (a wX) => ShowDict (a wX) 29 showDict1 = Dict 30 31showsPrec1 :: Show1 a => Int -> a wX -> ShowS 32showsPrec1 = showsPrecD showDict1 33 34show1 :: Show1 a => a wX -> String 35show1 = showD showDict1 36 37class Show2 a where 38 showDict2 :: ShowDict (a wX wY) 39 default showDict2 :: Show (a wX wY) => ShowDict (a wX wY) 40 showDict2 = Dict 41 42showsPrec2 :: Show2 a => Int -> a wX wY -> ShowS 43showsPrec2 = showsPrecD showDict2 44 45show2 :: Show2 a => a wX wY -> String 46show2 = showD showDict2 47 48showOp2 :: (Show2 a, Show2 b) => Int -> String -> Int -> a wW wX -> b wY wZ -> String -> String 49showOp2 prec opstr d x y = showParen (d > prec) $ showsPrec2 (prec + 1) x . 50 showString opstr . showsPrec2 (prec + 1) y 51