{-# OPTIONS_GHC -fno-warn-orphans #-}
module Darcs.Patch.V1.Show ( showPatch_ ) where

import Darcs.Prelude

import Darcs.Patch.Show ( ShowPatchBasic(..), ShowPatchFor(..) )
import Darcs.Patch.V1.Core ( RepoPatchV1(..) )

import Darcs.Util.Printer ( Doc, text, blueText, ($$), (<+>) )


showPatch_ :: ShowPatchBasic prim => prim wX wY -> Doc
showPatch_ :: forall (prim :: * -> * -> *) wX wY.
ShowPatchBasic prim =>
prim wX wY -> Doc
showPatch_ = ShowPatchFor -> prim wX wY -> Doc
forall wX wY. ShowPatchFor -> prim wX wY -> Doc
forall (p :: * -> * -> *) wX wY.
ShowPatchBasic p =>
ShowPatchFor -> p wX wY -> Doc
showPatch ShowPatchFor
ForDisplay

showMerger :: ShowPatchBasic prim
           => ShowPatchFor
           -> String
           -> RepoPatchV1 prim wA wB
           -> RepoPatchV1 prim wD wE
           -> Doc
showMerger :: forall (prim :: * -> * -> *) wA wB wD wE.
ShowPatchBasic prim =>
ShowPatchFor
-> String
-> RepoPatchV1 prim wA wB
-> RepoPatchV1 prim wD wE
-> Doc
showMerger ShowPatchFor
f String
merger_name RepoPatchV1 prim wA wB
p1 RepoPatchV1 prim wD wE
p2 =
    String -> Doc
blueText String
merger_name Doc -> Doc -> Doc
<+> String -> Doc
text String
"0.0" Doc -> Doc -> Doc
<+> String -> Doc
blueText String
"("
                           Doc -> Doc -> Doc
$$ ShowPatchFor -> RepoPatchV1 prim wA wB -> Doc
forall wX wY. ShowPatchFor -> RepoPatchV1 prim wX wY -> Doc
forall (p :: * -> * -> *) wX wY.
ShowPatchBasic p =>
ShowPatchFor -> p wX wY -> Doc
showPatch ShowPatchFor
f RepoPatchV1 prim wA wB
p1
                           Doc -> Doc -> Doc
$$ ShowPatchFor -> RepoPatchV1 prim wD wE -> Doc
forall wX wY. ShowPatchFor -> RepoPatchV1 prim wX wY -> Doc
forall (p :: * -> * -> *) wX wY.
ShowPatchBasic p =>
ShowPatchFor -> p wX wY -> Doc
showPatch ShowPatchFor
f RepoPatchV1 prim wD wE
p2
                           Doc -> Doc -> Doc
$$ String -> Doc
blueText String
")"

instance ShowPatchBasic prim => ShowPatchBasic (RepoPatchV1 prim) where
    showPatch :: forall wX wY. ShowPatchFor -> RepoPatchV1 prim wX wY -> Doc
showPatch ShowPatchFor
f (PP prim wX wY
p) = ShowPatchFor -> prim wX wY -> Doc
forall wX wY. ShowPatchFor -> prim wX wY -> Doc
forall (p :: * -> * -> *) wX wY.
ShowPatchBasic p =>
ShowPatchFor -> p wX wY -> Doc
showPatch ShowPatchFor
f prim wX wY
p
    showPatch ShowPatchFor
f (Merger FL (RepoPatchV1 prim) wX wY
_ RL (RepoPatchV1 prim) wX wB
_ RepoPatchV1 prim wC wX
p1 RepoPatchV1 prim wC wD
p2) = ShowPatchFor
-> String
-> RepoPatchV1 prim wC wX
-> RepoPatchV1 prim wC wD
-> Doc
forall (prim :: * -> * -> *) wA wB wD wE.
ShowPatchBasic prim =>
ShowPatchFor
-> String
-> RepoPatchV1 prim wA wB
-> RepoPatchV1 prim wD wE
-> Doc
showMerger ShowPatchFor
f String
"merger" RepoPatchV1 prim wC wX
p1 RepoPatchV1 prim wC wD
p2
    showPatch ShowPatchFor
f (Regrem FL (RepoPatchV1 prim) wY wX
_ RL (RepoPatchV1 prim) wY wB
_ RepoPatchV1 prim wC wY
p1 RepoPatchV1 prim wC wD
p2) = ShowPatchFor
-> String
-> RepoPatchV1 prim wC wY
-> RepoPatchV1 prim wC wD
-> Doc
forall (prim :: * -> * -> *) wA wB wD wE.
ShowPatchBasic prim =>
ShowPatchFor
-> String
-> RepoPatchV1 prim wA wB
-> RepoPatchV1 prim wD wE
-> Doc
showMerger ShowPatchFor
f String
"regrem" RepoPatchV1 prim wC wY
p1 RepoPatchV1 prim wC wD
p2