darcs-2.16.1: src/Darcs/Patch/FromPrim.hs
module Darcs.Patch.FromPrim
( PrimPatchBase(..)
, FromPrim(..)
, ToPrim(..)
, ToFromPrim
) where
import Darcs.Prelude
import Darcs.Patch.Prim ( PrimPatch )
import Darcs.Patch.Witnesses.Ordered ( FL, RL, mapFL_FL )
import Darcs.Patch.Ident ( PatchId )
import Darcs.Patch.Info ( PatchInfo )
class PrimPatch (PrimOf p) => PrimPatchBase p where
type PrimOf (p :: (* -> * -> *)) :: (* -> * -> *)
instance PrimPatchBase p => PrimPatchBase (FL p) where
type PrimOf (FL p) = PrimOf p
instance PrimPatchBase p => PrimPatchBase (RL p) where
type PrimOf (RL p) = PrimOf p
class FromPrim p where
fromAnonymousPrim :: PrimOf p wX wY -> p wX wY
fromPrim :: PatchId p -> PrimOf p wX wY -> p wX wY
fromPrims :: PatchInfo -> FL (PrimOf p) wX wY -> FL p wX wY
default fromPrim :: (PatchId p ~ ()) => PatchId p -> PrimOf p wX wY -> p wX wY
fromPrim () = fromAnonymousPrim
default fromPrims :: (PatchId p ~ ()) => PatchInfo -> FL (PrimOf p) wX wY -> FL p wX wY
fromPrims _ = mapFL_FL (fromPrim ())
class ToPrim p where
toPrim :: p wX wY -> Maybe (PrimOf p wX wY)
type ToFromPrim p = (FromPrim p, ToPrim p)