darcs-2.18.5: a distributed, interactive, smart revision control system
Safe HaskellNone
LanguageHaskell2010

Darcs.Patch.Invertible

Description

Formal inverses for patches that aren't really invertible. Note that most the mixed {Fwd,Rev} cases for Commute and Eq2 are just errors.

Synopsis

Documentation

data Invertible (p :: Type -> Type -> Type) wX wY #

Wrapper type to allow formal inversion of patches which aren't really invertible.

Instances

Instances details
Apply p => Apply (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

Associated Types

type ApplyState (Invertible p) 
Instance details

Defined in Darcs.Patch.Invertible

Methods

apply :: ApplyMonad (ApplyState (Invertible p)) m => Invertible p wX wY -> m () #

unapply :: ApplyMonad (ApplyState (Invertible p)) m => Invertible p wX wY -> m () #

Commute p => Commute (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

Methods

commute :: (Invertible p :> Invertible p) wX wY -> Maybe ((Invertible p :> Invertible p) wX wY) #

PatchListFormat p => PatchListFormat (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

PrimPatchBase p => PrimPatchBase (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

Associated Types

type PrimOf (Invertible p) 
Instance details

Defined in Darcs.Patch.Invertible

type PrimOf (Invertible p) = PrimOf p
Ident p => Ident (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

Methods

ident :: Invertible p wX wY -> PatchId (Invertible p) #

PatchInspect p => PatchInspect (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

Methods

listTouchedFiles :: Invertible p wX wY -> [AnchoredPath] #

hunkMatches :: (ByteString -> Bool) -> Invertible p wX wY -> Bool #

Invert (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

Methods

invert :: Invertible p wX wY -> Invertible p wY wX #

ShowContextPatch p => ShowContextPatch (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

ShowPatch p => ShowPatch (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

Methods

content :: Invertible p wX wY -> Doc #

description :: Invertible p wX wY -> Doc #

summary :: Invertible p wX wY -> Doc #

summaryFL :: FL (Invertible p) wX wY -> Doc #

thing :: Invertible p wX wY -> String #

things :: Invertible p wX wY -> String #

ShowPatchBasic p => ShowPatchBasic (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

Methods

showPatch :: ShowPatchFor -> Invertible p wX wY -> Doc #

Eq2 p => Eq2 (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

Methods

unsafeCompare :: Invertible p wA wB -> Invertible p wC wD -> Bool #

(=\/=) :: Invertible p wA wB -> Invertible p wA wC -> EqCheck wB wC #

(=/\=) :: Invertible p wA wC -> Invertible p wB wC -> EqCheck wA wB #

type ApplyState (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

type PrimOf (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

type PrimOf (Invertible p) = PrimOf p
type PatchId (Invertible p) # 
Instance details

Defined in Darcs.Patch.Invertible

mkInvertible :: p wX wY -> Invertible p wX wY #

Wrap a patch to make it (formally) Invertible. The result is initially positive i.e. Fwd.

fromPositiveInvertible :: Invertible p wX wY -> p wX wY #

Get the underlying patch from an Invertible, assuming (as a precondition) that it is positive i.e. Fwd.

withInvertible :: (forall wA wB. p wA wB -> r) -> Invertible p wX wY -> r #

Run a function on the patch inside an Invertible. The function has to be parametric in the witnesses, so we can run it with both a Fwd and a Rev patch.