{-# LANGUAGE EmptyDataDecls, StandaloneDeriving #-}
module Darcs.Patch.Set
( PatchSet(..)
, Tagged(..)
, SealedPatchSet
, Origin
, progressPatchSet
, tags
, emptyPatchSet
, appendPSFL
, patchSet2RL
, patchSet2FL
, patchSetfMap
) where
import Prelude ()
import Darcs.Prelude
import Darcs.Patch.Info ( PatchInfo )
import Darcs.Patch.PatchInfoAnd ( PatchInfoAnd, info )
import Darcs.Patch.Witnesses.Sealed ( Sealed )
import Darcs.Patch.Witnesses.Ordered
( FL, RL(..), (+<+), reverseFL, reverseRL,
mapRL_RL, concatRL, mapRL )
import Darcs.Patch.Witnesses.Show ( Show1(..), Show2(..), ShowDict(ShowDictClass) )
import Darcs.Util.Progress ( progress )
data Origin
type SealedPatchSet rt p wStart = Sealed ((PatchSet rt p) wStart)
data PatchSet rt p wStart wY where
PatchSet :: RL (Tagged rt p) wStart wX -> RL (PatchInfoAnd rt p) wX wY
-> PatchSet rt p wStart wY
deriving instance Show2 p => Show (PatchSet rt p wStart wY)
instance Show2 p => Show1 (PatchSet rt p wStart) where
showDict1 :: ShowDict (PatchSet rt p wStart wX)
showDict1 = ShowDict (PatchSet rt p wStart wX)
forall a. Show a => ShowDict a
ShowDictClass
instance Show2 p => Show2 (PatchSet rt p) where
showDict2 :: ShowDict (PatchSet rt p wX wY)
showDict2 = ShowDict (PatchSet rt p wX wY)
forall a. Show a => ShowDict a
ShowDictClass
emptyPatchSet :: PatchSet rt p wX wX
emptyPatchSet :: PatchSet rt p wX wX
emptyPatchSet = RL (Tagged rt p) wX wX
-> RL (PatchInfoAnd rt p) wX wX -> PatchSet rt p wX wX
forall (rt :: RepoType) (p :: * -> * -> *) wStart wX wY.
RL (Tagged rt p) wStart wX
-> RL (PatchInfoAnd rt p) wX wY -> PatchSet rt p wStart wY
PatchSet RL (Tagged rt p) wX wX
forall (a :: * -> * -> *) wX. RL a wX wX
NilRL RL (PatchInfoAnd rt p) wX wX
forall (a :: * -> * -> *) wX. RL a wX wX
NilRL
data Tagged rt p wX wZ where
Tagged :: PatchInfoAnd rt p wY wZ -> Maybe String
-> RL (PatchInfoAnd rt p) wX wY -> Tagged rt p wX wZ
deriving instance Show2 p => Show (Tagged rt p wX wZ)
instance Show2 p => Show1 (Tagged rt p wX) where
showDict1 :: ShowDict (Tagged rt p wX wX)
showDict1 = ShowDict (Tagged rt p wX wX)
forall a. Show a => ShowDict a
ShowDictClass
instance Show2 p => Show2 (Tagged rt p) where
showDict2 :: ShowDict (Tagged rt p wX wY)
showDict2 = ShowDict (Tagged rt p wX wY)
forall a. Show a => ShowDict a
ShowDictClass
patchSet2RL :: PatchSet rt p wStart wX -> RL (PatchInfoAnd rt p) wStart wX
patchSet2RL :: PatchSet rt p wStart wX -> RL (PatchInfoAnd rt p) wStart wX
patchSet2RL (PatchSet ts :: RL (Tagged rt p) wStart wX
ts ps :: RL (PatchInfoAnd rt p) wX wX
ps) = RL (RL (PatchInfoAnd rt p)) wStart wX
-> RL (PatchInfoAnd rt p) wStart wX
forall (a :: * -> * -> *) wX wZ. RL (RL a) wX wZ -> RL a wX wZ
concatRL ((forall wW wY. Tagged rt p wW wY -> RL (PatchInfoAnd rt p) wW wY)
-> RL (Tagged rt p) wStart wX
-> RL (RL (PatchInfoAnd rt p)) wStart wX
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> RL a wX wZ -> RL b wX wZ
mapRL_RL forall wW wY. Tagged rt p wW wY -> RL (PatchInfoAnd rt p) wW wY
forall (rt :: RepoType) (p :: * -> * -> *) wY wZ.
Tagged rt p wY wZ -> RL (PatchInfoAnd rt p) wY wZ
ts2rl RL (Tagged rt p) wStart wX
ts) RL (PatchInfoAnd rt p) wStart wX
-> RL (PatchInfoAnd rt p) wX wX -> RL (PatchInfoAnd rt p) wStart wX
forall (a :: * -> * -> *) wX wY wZ.
RL a wX wY -> RL a wY wZ -> RL a wX wZ
+<+ RL (PatchInfoAnd rt p) wX wX
ps
where
ts2rl :: Tagged rt p wY wZ -> RL (PatchInfoAnd rt p) wY wZ
ts2rl :: Tagged rt p wY wZ -> RL (PatchInfoAnd rt p) wY wZ
ts2rl (Tagged t :: PatchInfoAnd rt p wY wZ
t _ ps2 :: RL (PatchInfoAnd rt p) wY wY
ps2) = RL (PatchInfoAnd rt p) wY wY
ps2 RL (PatchInfoAnd rt p) wY wY
-> PatchInfoAnd rt p wY wZ -> RL (PatchInfoAnd rt p) wY wZ
forall (a :: * -> * -> *) wX wY wZ.
RL a wX wY -> a wY wZ -> RL a wX wZ
:<: PatchInfoAnd rt p wY wZ
t
patchSet2FL :: PatchSet rt p wStart wX -> FL (PatchInfoAnd rt p) wStart wX
patchSet2FL :: PatchSet rt p wStart wX -> FL (PatchInfoAnd rt p) wStart wX
patchSet2FL = RL (PatchInfoAnd rt p) wStart wX
-> FL (PatchInfoAnd rt p) wStart wX
forall (a :: * -> * -> *) wX wZ. RL a wX wZ -> FL a wX wZ
reverseRL (RL (PatchInfoAnd rt p) wStart wX
-> FL (PatchInfoAnd rt p) wStart wX)
-> (PatchSet rt p wStart wX -> RL (PatchInfoAnd rt p) wStart wX)
-> PatchSet rt p wStart wX
-> FL (PatchInfoAnd rt p) wStart wX
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PatchSet rt p wStart wX -> RL (PatchInfoAnd rt p) wStart wX
forall (rt :: RepoType) (p :: * -> * -> *) wStart wX.
PatchSet rt p wStart wX -> RL (PatchInfoAnd rt p) wStart wX
patchSet2RL
appendPSFL :: PatchSet rt p wStart wX -> FL (PatchInfoAnd rt p) wX wY
-> PatchSet rt p wStart wY
appendPSFL :: PatchSet rt p wStart wX
-> FL (PatchInfoAnd rt p) wX wY -> PatchSet rt p wStart wY
appendPSFL (PatchSet ts :: RL (Tagged rt p) wStart wX
ts ps :: RL (PatchInfoAnd rt p) wX wX
ps) newps :: FL (PatchInfoAnd rt p) wX wY
newps = RL (Tagged rt p) wStart wX
-> RL (PatchInfoAnd rt p) wX wY -> PatchSet rt p wStart wY
forall (rt :: RepoType) (p :: * -> * -> *) wStart wX wY.
RL (Tagged rt p) wStart wX
-> RL (PatchInfoAnd rt p) wX wY -> PatchSet rt p wStart wY
PatchSet RL (Tagged rt p) wStart wX
ts (RL (PatchInfoAnd rt p) wX wX
ps RL (PatchInfoAnd rt p) wX wX
-> RL (PatchInfoAnd rt p) wX wY -> RL (PatchInfoAnd rt p) wX wY
forall (a :: * -> * -> *) wX wY wZ.
RL a wX wY -> RL a wY wZ -> RL a wX wZ
+<+ FL (PatchInfoAnd rt p) wX wY -> RL (PatchInfoAnd rt p) wX wY
forall (a :: * -> * -> *) wX wZ. FL a wX wZ -> RL a wX wZ
reverseFL FL (PatchInfoAnd rt p) wX wY
newps)
progressPatchSet :: String -> PatchSet rt p wStart wX -> PatchSet rt p wStart wX
progressPatchSet :: String -> PatchSet rt p wStart wX -> PatchSet rt p wStart wX
progressPatchSet k :: String
k (PatchSet ts :: RL (Tagged rt p) wStart wX
ts ps :: RL (PatchInfoAnd rt p) wX wX
ps) =
RL (Tagged rt p) wStart wX
-> RL (PatchInfoAnd rt p) wX wX -> PatchSet rt p wStart wX
forall (rt :: RepoType) (p :: * -> * -> *) wStart wX wY.
RL (Tagged rt p) wStart wX
-> RL (PatchInfoAnd rt p) wX wY -> PatchSet rt p wStart wY
PatchSet ((forall wW wY. Tagged rt p wW wY -> Tagged rt p wW wY)
-> RL (Tagged rt p) wStart wX -> RL (Tagged rt p) wStart wX
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> RL a wX wZ -> RL b wX wZ
mapRL_RL forall wW wY. Tagged rt p wW wY -> Tagged rt p wW wY
forall (rt :: RepoType) (p :: * -> * -> *) wY wZ.
Tagged rt p wY wZ -> Tagged rt p wY wZ
progressTagged RL (Tagged rt p) wStart wX
ts) ((forall wW wY. PatchInfoAnd rt p wW wY -> PatchInfoAnd rt p wW wY)
-> RL (PatchInfoAnd rt p) wX wX -> RL (PatchInfoAnd rt p) wX wX
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> RL a wX wZ -> RL b wX wZ
mapRL_RL forall a. a -> a
forall wW wY. PatchInfoAnd rt p wW wY -> PatchInfoAnd rt p wW wY
prog RL (PatchInfoAnd rt p) wX wX
ps)
where
prog :: a -> a
prog = String -> a -> a
forall a. String -> a -> a
progress String
k
progressTagged :: Tagged rt p wY wZ -> Tagged rt p wY wZ
progressTagged :: Tagged rt p wY wZ -> Tagged rt p wY wZ
progressTagged (Tagged t :: PatchInfoAnd rt p wY wZ
t h :: Maybe String
h tps :: RL (PatchInfoAnd rt p) wY wY
tps) = PatchInfoAnd rt p wY wZ
-> Maybe String
-> RL (PatchInfoAnd rt p) wY wY
-> Tagged rt p wY wZ
forall (rt :: RepoType) (p :: * -> * -> *) wY wZ wX.
PatchInfoAnd rt p wY wZ
-> Maybe String
-> RL (PatchInfoAnd rt p) wX wY
-> Tagged rt p wX wZ
Tagged (PatchInfoAnd rt p wY wZ -> PatchInfoAnd rt p wY wZ
forall a. a -> a
prog PatchInfoAnd rt p wY wZ
t) Maybe String
h ((forall wW wY. PatchInfoAnd rt p wW wY -> PatchInfoAnd rt p wW wY)
-> RL (PatchInfoAnd rt p) wY wY -> RL (PatchInfoAnd rt p) wY wY
forall (a :: * -> * -> *) (b :: * -> * -> *) wX wZ.
(forall wW wY. a wW wY -> b wW wY) -> RL a wX wZ -> RL b wX wZ
mapRL_RL forall a. a -> a
forall wW wY. PatchInfoAnd rt p wW wY -> PatchInfoAnd rt p wW wY
prog RL (PatchInfoAnd rt p) wY wY
tps)
tags :: PatchSet rt p wStart wX -> [PatchInfo]
tags :: PatchSet rt p wStart wX -> [PatchInfo]
tags (PatchSet ts :: RL (Tagged rt p) wStart wX
ts _) = (forall wW wZ. Tagged rt p wW wZ -> PatchInfo)
-> RL (Tagged rt p) wStart wX -> [PatchInfo]
forall (a :: * -> * -> *) b wX wY.
(forall wW wZ. a wW wZ -> b) -> RL a wX wY -> [b]
mapRL forall wW wZ. Tagged rt p wW wZ -> PatchInfo
forall (rt :: RepoType) (p :: * -> * -> *) wY wZ.
Tagged rt p wY wZ -> PatchInfo
taggedTagInfo RL (Tagged rt p) wStart wX
ts
where
taggedTagInfo :: Tagged rt p wY wZ -> PatchInfo
taggedTagInfo :: Tagged rt p wY wZ -> PatchInfo
taggedTagInfo (Tagged t :: PatchInfoAnd rt p wY wZ
t _ _) = PatchInfoAnd rt p wY wZ -> PatchInfo
forall (rt :: RepoType) (p :: * -> * -> *) wA wB.
PatchInfoAnd rt p wA wB -> PatchInfo
info PatchInfoAnd rt p wY wZ
t
patchSetfMap:: (forall wW wZ . PatchInfoAnd rt p wW wZ -> IO a) -> PatchSet rt p wW' wZ' -> IO [a]
patchSetfMap :: (forall wW wZ. PatchInfoAnd rt p wW wZ -> IO a)
-> PatchSet rt p wW' wZ' -> IO [a]
patchSetfMap f :: forall wW wZ. PatchInfoAnd rt p wW wZ -> IO a
f = [IO a] -> IO [a]
forall (t :: * -> *) (m :: * -> *) a.
(Traversable t, Monad m) =>
t (m a) -> m (t a)
sequence ([IO a] -> IO [a])
-> (PatchSet rt p wW' wZ' -> [IO a])
-> PatchSet rt p wW' wZ'
-> IO [a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. (forall wW wZ. PatchInfoAnd rt p wW wZ -> IO a)
-> RL (PatchInfoAnd rt p) wW' wZ' -> [IO a]
forall (a :: * -> * -> *) b wX wY.
(forall wW wZ. a wW wZ -> b) -> RL a wX wY -> [b]
mapRL forall wW wZ. PatchInfoAnd rt p wW wZ -> IO a
f (RL (PatchInfoAnd rt p) wW' wZ' -> [IO a])
-> (PatchSet rt p wW' wZ' -> RL (PatchInfoAnd rt p) wW' wZ')
-> PatchSet rt p wW' wZ'
-> [IO a]
forall b c a. (b -> c) -> (a -> b) -> a -> c
. PatchSet rt p wW' wZ' -> RL (PatchInfoAnd rt p) wW' wZ'
forall (rt :: RepoType) (p :: * -> * -> *) wStart wX.
PatchSet rt p wStart wX -> RL (PatchInfoAnd rt p) wStart wX
patchSet2RL