Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
Synopsis
- data PatchSet p wStart wY where
- data Tagged p wX wZ where
- Tagged :: RL (PatchInfoAnd p) wX wY -> PatchInfoAnd p wY wZ -> Maybe InventoryHash -> Tagged p wX wZ
- type SealedPatchSet p wStart = Sealed (PatchSet p wStart)
- data Origin
- progressPatchSet :: String -> PatchSet p wStart wX -> PatchSet p wStart wX
- patchSetInventoryHashes :: PatchSet p wX wY -> [Maybe InventoryHash]
- patchSetTags :: PatchSet p wX wY -> [String]
- emptyPatchSet :: PatchSet p Origin Origin
- appendPSFL :: PatchSet p wStart wX -> FL (PatchInfoAnd p) wX wY -> PatchSet p wStart wY
- patchSet2RL :: PatchSet p wStart wX -> RL (PatchInfoAnd p) wStart wX
- patchSet2FL :: PatchSet p wStart wX -> FL (PatchInfoAnd p) wStart wX
- inOrderTags :: PatchSet p wS wX -> [PatchInfo]
- patchSetSnoc :: PatchSet p wX wY -> PatchInfoAnd p wY wZ -> PatchSet p wX wZ
- patchSetSplit :: PatchSet p wX wY -> (PatchSet p :> RL (PatchInfoAnd p)) wX wY
- patchSetDrop :: Int -> PatchSet p wStart wX -> SealedPatchSet p wStart
Documentation
data PatchSet p wStart wY where Source #
The patches in a repository are stored in chunks broken up at "clean" tags. A tag is clean if the only patches before it in the current repository ordering are ones that the tag depends on (either directly or indirectly). Each chunk is stored in a separate inventory file on disk.
A PatchSet
represents a repo's history as the list of patches since the
last clean tag, and then a list of patch lists each delimited by clean tags.
Because the invariants about clean tags can only be maintained if a
PatchSet
contains the whole history, the first witness is always forced
to be Origin
. The type still has two witnesses so it can easily be used
with combinators like :>
and Fork
.
The history is lazily loaded from disk so does not normally need to be all kept in memory.
data Tagged p wX wZ where Source #
A Tagged
is a single chunk of a PatchSet
.
It has a PatchInfo
representing a clean tag,
the hash of the previous inventory (if it exists),
and the list of patches since that previous inventory.
Tagged :: RL (PatchInfoAnd p) wX wY -> PatchInfoAnd p wY wZ -> Maybe InventoryHash -> Tagged p wX wZ |
type SealedPatchSet p wStart = Sealed (PatchSet p wStart) Source #
progressPatchSet :: String -> PatchSet p wStart wX -> PatchSet p wStart wX Source #
Runs a progress action for each tag and patch in a given PatchSet, using the passed progress message. Does not alter the PatchSet.
patchSetInventoryHashes :: PatchSet p wX wY -> [Maybe InventoryHash] Source #
appendPSFL :: PatchSet p wStart wX -> FL (PatchInfoAnd p) wX wY -> PatchSet p wStart wY Source #
appendPSFL
takes a PatchSet
and a FL
of patches that "follow" the
PatchSet, and concatenates the patches into the PatchSet.
patchSet2RL :: PatchSet p wStart wX -> RL (PatchInfoAnd p) wStart wX Source #
patchSet2RL
takes a PatchSet
and returns an equivalent, linear RL
of
patches.
patchSet2FL :: PatchSet p wStart wX -> FL (PatchInfoAnd p) wStart wX Source #
patchSet2FL
takes a PatchSet
and returns an equivalent, linear FL
of
patches.
inOrderTags :: PatchSet p wS wX -> [PatchInfo] Source #
patchSetSnoc :: PatchSet p wX wY -> PatchInfoAnd p wY wZ -> PatchSet p wX wZ Source #
patchSetSplit :: PatchSet p wX wY -> (PatchSet p :> RL (PatchInfoAnd p)) wX wY Source #
Split a PatchSet
before the latest known clean tag. The left part
is what comes before the tag, the right part is the tag and its
non-dependencies.
patchSetDrop :: Int -> PatchSet p wStart wX -> SealedPatchSet p wStart Source #
Drop the last n
patches from the given PatchSet
.