module Darcs.Patch.V1.Core
( Patch(..),
isMerger, mergerUndo
) where
import Darcs.Patch.Format ( PatchListFormat(..), ListFormat(ListFormatV1) )
import Darcs.Patch.Prim ( FromPrim(..), PrimOf, PrimPatchBase, PrimPatch )
import Darcs.Patch.Repair ( Check )
import Darcs.Witnesses.Ordered ( FL(..), RL )
#include "gadts.h"
#include "impossible.h"
data Patch prim C(x y) where
PP :: prim C(x y) -> Patch prim C(x y)
Merger :: FL (Patch prim) C(x y)
-> RL (Patch prim) C(x b)
-> Patch prim C(c b)
-> Patch prim C(c d)
-> Patch prim C(x y)
Regrem :: FL (Patch prim) C(x y)
-> RL (Patch prim) C(x b)
-> Patch prim C(c b)
-> Patch prim C(c a)
-> Patch prim C(y x)
instance PrimPatch prim => PrimPatchBase (Patch prim) where
type PrimOf (Patch prim) = prim
instance FromPrim (Patch prim) where
fromPrim = PP
isMerger :: Patch prim C(a b) -> Bool
isMerger (Merger _ _ _ _) = True
isMerger (Regrem _ _ _ _) = True
isMerger _ = False
mergerUndo :: Patch prim C(x y) -> FL (Patch prim) C(x y)
mergerUndo (Merger undo _ _ _) = undo
mergerUndo _ = impossible
instance PatchListFormat (Patch prim) where
patchListFormat = ListFormatV1
instance Check (Patch prim)