darcs-2.16.1: src/Darcs/Patch/V3.hs
{-# OPTIONS_GHC -fno-warn-orphans #-}
module Darcs.Patch.V3 ( RepoPatchV3 ) where
import Darcs.Prelude
import Darcs.Patch.Annotate ()
import Darcs.Patch.FromPrim ( FromPrim(..) )
import Darcs.Patch.Prim.Named
( PrimPatchId
, anonymousNamedPrim, namedPrim, positivePrimPatchIds
)
import Darcs.Patch.Witnesses.Ordered ( FL(..) )
import qualified Darcs.Patch.V3.Core as Core ( RepoPatchV3(..) )
import Darcs.Patch.V3.Resolution ()
type RepoPatchV3 = Core.RepoPatchV3 PrimPatchId
-- This instance is specialised to PrimPatchId because it is dependent
-- on the relationship between PatchInfo and PrimPatchId
instance FromPrim (RepoPatchV3 prim) where
fromAnonymousPrim = Core.Prim . anonymousNamedPrim
fromPrim pid p = Core.Prim (namedPrim pid p)
fromPrims = go . positivePrimPatchIds
where
go :: [PrimPatchId] -> FL prim wX wY -> FL (RepoPatchV3 prim) wX wY
go _ NilFL = NilFL
go (pid:pids) (p:>:ps) = fromPrim pid p :>: go pids ps
go [] _ = error "positivePrimPatchIds should return an infinite list"