module Darcs.Patch.Witnesses.Show
    ( Show1(..)
    , Show2(..)
    , show1
    , showsPrec1
    , show2
    , showsPrec2
    , showOp2
    , appPrec
    ) where

import Darcs.Prelude

import Darcs.Util.Show ( appPrec )

import Data.Constraint ( Dict(..) )

type ShowDict a = Dict (Show a)

showsPrecD :: ShowDict a -> Int -> a -> ShowS
showsPrecD :: forall a. ShowDict a -> Int -> a -> ShowS
showsPrecD Dict (Show a)
Dict       = forall a. Show a => Int -> a -> ShowS
showsPrec

showD :: ShowDict a -> a -> String
showD :: forall a. ShowDict a -> a -> String
showD Dict (Show a)
Dict       = forall a. Show a => a -> String
show

class Show1 a where
  showDict1 :: Dict (Show (a wX))
  default showDict1 :: Show (a wX) => ShowDict (a wX)
  showDict1 = forall (a :: Constraint). a => Dict a
Dict

showsPrec1 :: Show1 a => Int -> a wX -> ShowS
showsPrec1 :: forall (a :: * -> *) wX. Show1 a => Int -> a wX -> ShowS
showsPrec1 = forall a. ShowDict a -> Int -> a -> ShowS
showsPrecD forall (a :: * -> *) wX. Show1 a => Dict (Show (a wX))
showDict1

show1 :: Show1 a => a wX -> String
show1 :: forall (a :: * -> *) wX. Show1 a => a wX -> String
show1 = forall a. ShowDict a -> a -> String
showD forall (a :: * -> *) wX. Show1 a => Dict (Show (a wX))
showDict1

class Show2 a where
  showDict2 :: ShowDict (a wX wY)
  default showDict2 :: Show (a wX wY) => ShowDict (a wX wY)
  showDict2 = forall (a :: Constraint). a => Dict a
Dict

showsPrec2 :: Show2 a => Int -> a wX wY -> ShowS
showsPrec2 :: forall (a :: * -> * -> *) wX wY. Show2 a => Int -> a wX wY -> ShowS
showsPrec2 = forall a. ShowDict a -> Int -> a -> ShowS
showsPrecD forall (a :: * -> * -> *) wX wY. Show2 a => ShowDict (a wX wY)
showDict2

show2 :: Show2 a => a wX wY -> String
show2 :: forall (a :: * -> * -> *) wX wY. Show2 a => a wX wY -> String
show2 = forall a. ShowDict a -> a -> String
showD forall (a :: * -> * -> *) wX wY. Show2 a => ShowDict (a wX wY)
showDict2

showOp2 :: (Show2 a, Show2 b) => Int -> String -> Int -> a wW wX -> b wY wZ -> String -> String
showOp2 :: forall (a :: * -> * -> *) (b :: * -> * -> *) wW wX wY wZ.
(Show2 a, Show2 b) =>
Int -> String -> Int -> a wW wX -> b wY wZ -> ShowS
showOp2 Int
prec String
opstr Int
d a wW wX
x b wY wZ
y = Bool -> ShowS -> ShowS
showParen (Int
d forall a. Ord a => a -> a -> Bool
> Int
prec) forall a b. (a -> b) -> a -> b
$ forall (a :: * -> * -> *) wX wY. Show2 a => Int -> a wX wY -> ShowS
showsPrec2 (Int
prec forall a. Num a => a -> a -> a
+ Int
1) a wW wX
x forall b c a. (b -> c) -> (a -> b) -> a -> c
.
                          String -> ShowS
showString String
opstr forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (a :: * -> * -> *) wX wY. Show2 a => Int -> a wX wY -> ShowS
showsPrec2 (Int
prec forall a. Num a => a -> a -> a
+ Int
1) b wY wZ
y