Safe Haskell | None |
---|---|
Language | Haskell2010 |
Darcs.Patch.Commute
Synopsis
- class Commute (p :: Type -> Type -> Type) where
- commuteFL :: forall (p :: Type -> Type -> Type) wX wY. Commute p => (p :> FL p) wX wY -> Maybe ((FL p :> p) wX wY)
- commuteRL :: forall (p :: Type -> Type -> Type) wX wY. Commute p => (RL p :> p) wX wY -> Maybe ((p :> RL p) wX wY)
- commuteRLFL :: forall (p :: Type -> Type -> Type) wX wY. Commute p => (RL p :> FL p) wX wY -> Maybe ((FL p :> RL p) wX wY)
- selfCommuter :: forall (p :: Type -> Type -> Type). Commute p => CommuteFn p p
Documentation
class Commute (p :: Type -> Type -> Type) where #
Class of patches that that can be commuted.
Instances should obey the following laws:
- commute-symmetry
commute (p:>q) == Just (q':>p') <=> commute (q':>p') == Just (p':>q)
- invert-commute
If patches are invertible, then
commute (p:>q) == Just (q':>p') <=> commute (invert q:>invert p) == Just (invert p':>invert q')
The more general law
- square-commute
commute (p:>q) == Just (q':>p') => commute (invert p:>q') == Just (q:>invert p')
is valid in general only provided we know (a priori) that
succeeds, in other words, that p and q are not in conflict with each
other. See Darcs.Patch.CommuteNoConflicts for an extended discussion.commute
(invert
p:>
q')
Instances
commuteFL :: forall (p :: Type -> Type -> Type) wX wY. Commute p => (p :> FL p) wX wY -> Maybe ((FL p :> p) wX wY) #
commuteFL
commutes a single element past a FL.
commuteRL :: forall (p :: Type -> Type -> Type) wX wY. Commute p => (RL p :> p) wX wY -> Maybe ((p :> RL p) wX wY) #
commuteRL
commutes a RL past a single element.