| Safe Haskell | None |
|---|---|
| Language | Haskell2010 |
Data.Diff
- class (Eq a, Patch (Edit a)) => Diff a where
- type Edit a
- class Patch a where
- data DiffLevel where
- data MergeResult a
- = Incompatible
- | Conflict a
- | NoConflict a
- merge :: Diff a => a -> a -> a -> MergeResult a
- catLevels :: Foldable f => f DiffLevel -> DiffLevel
- normDL :: Double -> DiffLevel -> Maybe DiffLevel
- dlPercent :: DiffLevel -> Double
- percentDiff :: Diff a => a -> a -> Double
- prodPatchLevel :: forall as. Every Diff as => Prod Edit' as -> DiffLevel
- compareDiff :: Diff a => a -> a -> DiffLevel
- class Patch a => ShowPatch a where
- putPatch :: ShowPatch a => a -> IO ()
- class DefaultDiff p a where
- newtype Edit' a = Edit' {}
- diff' :: Diff a => a -> a -> Edit' a
- patch' :: Diff a => Edit' a -> a -> Maybe a
- undiff' :: Diff a => Edit' a -> (a, a)
- data Swap a
- eqDiff :: Eq a => a -> a -> Swap a
- eqPatch :: Swap a -> a -> Maybe a
- newtype EqDiff a = EqDiff {
- getEqDiff :: a
- gpatchLevel :: forall a ass. (Generic a, Code a ~ ass, Every (Every Patch) ass) => a -> DiffLevel
- gmergePatch :: forall a as. (IsProductType a as, Every Patch as) => a -> a -> MergeResult a
- newtype SeqPatchAt (p :: Nat) a = SPA {}
- type SeqPatch = SeqPatchAt 20
- listDiff :: forall p a. (KnownNat p, Diff a) => [a] -> [a] -> SeqPatchAt p a
- listPatch :: Eq a => SeqPatchAt p a -> [a] -> Maybe [a]
- listUndiff :: SeqPatchAt p a -> ([a], [a])
- seqDiff :: (KnownNat p, Diff a) => (t -> [a]) -> t -> t -> SeqPatchAt p a
- seqPatch :: Eq a => (t -> [a]) -> ([a] -> t) -> SeqPatchAt p a -> t -> Maybe t
- seqUndiff :: ([a] -> t) -> SeqPatchAt p a -> (t, t)
- newtype EqSeqPatch a = ESP {
- getESP :: SeqPatchAt 0 (EqDiff a)
- eqListDiff :: Eq a => [a] -> [a] -> EqSeqPatch a
- eqListPatch :: Eq a => EqSeqPatch a -> [a] -> Maybe [a]
- eqListUndiff :: EqSeqPatch a -> ([a], [a])
- eqSeqDiff :: Eq a => (t -> [a]) -> t -> t -> EqSeqPatch a
- eqSeqPatch :: Eq a => (t -> [a]) -> ([a] -> t) -> EqSeqPatch a -> t -> Maybe t
- eqSeqUndiff :: Eq a => ([a] -> t) -> EqSeqPatch a -> (t, t)
- newtype LinesPatch t = LP {
- getLP :: EqSeqPatch Text
- newtype Lines t = Lines {
- getLines :: t
- newtype GPatch a = GP {}
- gdiff :: forall a. (Generic a, Every (Every Diff) (Code a), Every Typeable (Code a)) => a -> a -> GPatch a
- gdiff' :: forall a. (Generic a, Every (Every Diff) (Code a)) => a -> a -> GPatch a
- gpatch :: forall a. (Generic a, Every (Every Diff) (Code a)) => GPatch a -> a -> Maybe a
- gundiff :: forall a. (Generic a, Every (Every Diff) (Code a)) => GPatch a -> (a, a)
- data GPatchProd a = Code a ~ '[as] => GPP {}
- gdiffProd :: forall a as. (IsProductType a as, Every Diff as) => a -> a -> GPatchProd a
- gpatchProd :: forall a as. (IsProductType a as, Every Diff as) => GPatchProd a -> a -> Maybe a
- gundiffProd :: forall a as. (IsProductType a as, Every Diff as) => GPatchProd a -> (a, a)
- data SumDiff :: (k -> Type) -> (k -> Type) -> [k] -> Type where
- data CtrDiff :: (k -> Type) -> (k -> Type) -> [k] -> k -> Type where
- data ValDiff a
- newtype MapDiff m a = MD {}
Documentation
class (Eq a, Patch (Edit a)) => Diff a where Source #
Methods
diff :: a -> a -> Edit a Source #
Generate a patch between two values, that can be used to transform one value into the other
patch :: Edit a -> a -> Maybe a Source #
Apply a patch to a value
undiff :: Edit a -> (a, a) Source #
Deconstruct a patch to recover the original value used to create it, and the application of the patch to that original value
diff :: DefaultDiff (Edit a) a => a -> a -> Edit a Source #
Generate a patch between two values, that can be used to transform one value into the other
patch :: DefaultDiff (Edit a) a => Edit a -> a -> Maybe a Source #
Apply a patch to a value
undiff :: DefaultDiff (Edit a) a => Edit a -> (a, a) Source #
Deconstruct a patch to recover the original value used to create it, and the application of the patch to that original value
Instances
| Diff Bool Source # | |
| Diff Char Source # | |
| Diff Double Source # | |
| Diff Float Source # | |
| Diff Int Source # | |
| Diff Integer Source # | |
| Eq a => Diff (EqDiff a) Source # | |
| (ConvertibleStrings t Text, ConvertibleStrings Text t, Eq t) => Diff (Lines t) Source # | Line-by-line diffing of strings |
| (Diff a, Diff b, Typeable * a, Typeable * b) => Diff (Either a b) Source # | |
| (Diff a, Diff b) => Diff (a, b) Source # | |
| (Diff a, Diff b, Diff c) => Diff (a, b, c) Source # | |
| (Diff a, Diff b, Diff c, Diff d) => Diff (a, b, c, d) Source # | |
| (Diff a, Diff b, Diff c, Diff d, Diff e) => Diff (a, b, c, d, e) Source # | |
| (Diff a, Diff b, Diff c, Diff d, Diff e, Diff f) => Diff (a, b, c, d, e, f) Source # | |
| (Diff a, Diff b, Diff c, Diff d, Diff e, Diff f, Diff g) => Diff (a, b, c, d, e, f, g) Source # | |
Methods
patchLevel :: a -> DiffLevel Source #
Level of patch
mergePatch :: a -> a -> MergeResult a Source #
Left-biased parallel merge of two patches
Returns Nothing if patches come from incompatible sources
Returns True if conflict occurred (and was resolved)
patchLevel :: (Generic a, Every (Every Patch) (Code a)) => a -> DiffLevel Source #
Level of patch
mergePatch :: (IsProductType a as, Every Patch as) => a -> a -> MergeResult a Source #
Instances
| Eq a => Patch (Swap a) Source # | |
| (IsProductType a as, Every * Diff as) => Patch (GPatchProd a) Source # | |
| (Generic a, Every [*] (Every * Diff) (Code a)) => Patch (GPatch a) Source # | |
| Patch (Edit a) => Patch (Edit' a) Source # | |
| Patch (LinesPatch t) Source # | |
| Eq a => Patch (EqSeqPatch a) Source # | |
| (KnownNat p, Diff a) => Patch (SeqPatchAt p a) Source # | |
| Diff a => Patch (MapDiff IntMap a) Source # | |
| (Diff a, Ord k) => Patch (MapDiff (Map k) a) Source # | |
| (Hashable k, Eq k, Diff a) => Patch (MapDiff (HashMap k) a) Source # | |
Data type representing a "percentage difference"
data MergeResult a Source #
Result of a merge
Constructors
| Incompatible | Incompatible sources |
| Conflict a | Conflicts, throwing away info |
| NoConflict a | All conflicts resolved |
Instances
| Monad MergeResult Source # | |
| Functor MergeResult Source # | |
| Applicative MergeResult Source # | |
| Foldable MergeResult Source # | |
| Traversable MergeResult Source # | |
| Eq a => Eq (MergeResult a) Source # | |
| Ord a => Ord (MergeResult a) Source # | |
| Show a => Show (MergeResult a) Source # | |
merge :: Diff a => a -> a -> a -> MergeResult a Source #
Left-biased merge of two diffable values.
normDL :: Double -> DiffLevel -> Maybe DiffLevel Source #
Rescale DiffLevel to be out of a given total.
percentDiff :: Diff a => a -> a -> Double Source #
How different two items are, as a percentage
class Patch a => ShowPatch a where Source #
Minimal complete definition
Instances
| (Show a, Eq a) => ShowPatch (Swap a) Source # | |
| (IsProductType a as, Every * Diff as, Every * Show as, HasDatatypeInfo a, Every * (Comp * * ShowPatch Edit') as) => ShowPatch (GPatchProd a) Source # | |
| (Generic a, HasDatatypeInfo a, Every [*] (Every * Diff) (Code a), Every [*] (Every * Show) (Code a), Every [*] (Every * (Comp * * ShowPatch Edit')) (Code a)) => ShowPatch (GPatch a) Source # | |
| ShowPatch (Edit a) => ShowPatch (Edit' a) Source # | |
| (KnownNat p, Diff a, Show a, ShowPatch (Edit a)) => ShowPatch (SeqPatchAt p a) Source # | |
| (Diff a, Show a, ShowPatch (Edit a)) => ShowPatch (MapDiff IntMap a) Source # | |
| (Diff a, Ord k, Show k, Show a, ShowPatch (Edit a)) => ShowPatch (MapDiff (Map k) a) Source # | |
| (Diff a, Hashable k, Eq k, Show k, Show a, ShowPatch (Edit a)) => ShowPatch (MapDiff (HashMap k) a) Source # | |
class DefaultDiff p a where Source #
Minimal complete definition
Methods
defaultDiff :: a -> a -> p Source #
defaultPatch :: p -> a -> Maybe a Source #
defaultUndiff :: p -> (a, a) Source #
Instances
| Eq a => DefaultDiff (Swap a) a Source # | |
| (IsProductType a as, Every * Diff as) => DefaultDiff (GPatchProd a) a Source # | |
| (Generic a, Every [*] (Every * Diff) (Code a), Every [*] (Typeable [*]) (Code a)) => DefaultDiff (GPatch a) a Source # | |
| (ConvertibleStrings t Text, ConvertibleStrings Text t) => DefaultDiff (LinesPatch t) t Source # | |
| (IsList l, (~) * e (Item l), Eq e) => DefaultDiff (EqSeqPatch e) l Source # | |
| (IsList l, (~) * e (Item l), Diff e, KnownNat p) => DefaultDiff (SeqPatchAt p e) l Source # | |
Newtype used to get around partial application of type families
Patch type that treats all changes as total differences
Instances
Newtype wrapper that gives an automatic Diff instance that treats
all changes as total differences.
Generic implementations
Patch
gpatchLevel :: forall a ass. (Generic a, Code a ~ ass, Every (Every Patch) ass) => a -> DiffLevel Source #
patchLevel written to work for any types deriving Generic.
gmergePatch :: forall a as. (IsProductType a as, Every Patch as) => a -> a -> MergeResult a Source #
mergePatch written to work for any product types deriving
Generic.
Diff
Sequences
Diff
newtype SeqPatchAt (p :: Nat) a Source #
Instances
| Eq a => Eq (SeqPatchAt p a) Source # | |
| Show a => Show (SeqPatchAt p a) Source # | |
| Generic (SeqPatchAt p a) Source # | |
| (KnownNat p, Diff a, Show a, ShowPatch (Edit a)) => ShowPatch (SeqPatchAt p a) Source # | |
| (KnownNat p, Diff a) => Patch (SeqPatchAt p a) Source # | |
| (IsList l, (~) * e (Item l), Diff e, KnownNat p) => DefaultDiff (SeqPatchAt p e) l Source # | |
| type Rep (SeqPatchAt p a) Source # | |
type SeqPatch = SeqPatchAt 20 Source #
listUndiff :: SeqPatchAt p a -> ([a], [a]) Source #
seqUndiff :: ([a] -> t) -> SeqPatchAt p a -> (t, t) Source #
Eq
newtype EqSeqPatch a Source #
Constructors
| ESP | |
Fields
| |
Instances
| Eq a => Eq (EqSeqPatch a) Source # | |
| Show a => Show (EqSeqPatch a) Source # | |
| Generic (EqSeqPatch a) Source # | |
| Eq a => Patch (EqSeqPatch a) Source # | |
| (IsList l, (~) * e (Item l), Eq e) => DefaultDiff (EqSeqPatch e) l Source # | |
| type Rep (EqSeqPatch a) Source # | |
eqListDiff :: Eq a => [a] -> [a] -> EqSeqPatch a Source #
eqListPatch :: Eq a => EqSeqPatch a -> [a] -> Maybe [a] Source #
eqListUndiff :: EqSeqPatch a -> ([a], [a]) Source #
eqSeqDiff :: Eq a => (t -> [a]) -> t -> t -> EqSeqPatch a Source #
eqSeqPatch :: Eq a => (t -> [a]) -> ([a] -> t) -> EqSeqPatch a -> t -> Maybe t Source #
eqSeqUndiff :: Eq a => ([a] -> t) -> EqSeqPatch a -> (t, t) Source #
Line-by-line
newtype LinesPatch t Source #
Constructors
| LP | |
Fields
| |
Instances
| Eq (LinesPatch t) Source # | |
| Show (LinesPatch t) Source # | |
| Generic (LinesPatch t) Source # | |
| Patch (LinesPatch t) Source # | |
| (ConvertibleStrings t Text, ConvertibleStrings Text t) => DefaultDiff (LinesPatch t) t Source # | |
| type Rep (LinesPatch t) Source # | |
Newtype wrapper for line-by-line diffing
Instances
| ConvertibleStrings s t => ConvertibleStrings s (Lines t) Source # | |
| Eq t => Eq (Lines t) Source # | |
| Read t => Read (Lines t) Source # | |
| Show t => Show (Lines t) Source # | |
| Generic (Lines t) Source # | |
| (ConvertibleStrings t Text, ConvertibleStrings Text t, Eq t) => Diff (Lines t) Source # | Line-by-line diffing of strings |
| ConvertibleStrings t s => ConvertibleStrings (Lines t) s Source # | |
| type Rep (Lines t) Source # | |
| type Edit (Lines t) Source # | |
Generic ADTs
Generic patch type for any types deriving Generic.
Instances
| Generic (GPatch a) Source # | |
| Generic (GPatch a) Source # | |
| (Generic a, HasDatatypeInfo a, Every [*] (Every * Diff) (Code a), Every [*] (Every * Show) (Code a), Every [*] (Every * (Comp * * ShowPatch Edit')) (Code a)) => ShowPatch (GPatch a) Source # | |
| (Generic a, Every [*] (Every * Diff) (Code a)) => Patch (GPatch a) Source # | |
| (Generic a, Every [*] (Every * Diff) (Code a), Every [*] (Typeable [*]) (Code a)) => DefaultDiff (GPatch a) a Source # | |
| type Rep (GPatch a) Source # | |
| type Code (GPatch a) Source # | |
gdiff :: forall a. (Generic a, Every (Every Diff) (Code a), Every Typeable (Code a)) => a -> a -> GPatch a Source #
data GPatchProd a Source #
Generic patch type for all product types that are instances of
Generic.
Instances
| (IsProductType a as, Every * Diff as, Every * Show as, HasDatatypeInfo a, Every * (Comp * * ShowPatch Edit') as) => ShowPatch (GPatchProd a) Source # | |
| (IsProductType a as, Every * Diff as) => Patch (GPatchProd a) Source # | |
| (IsProductType a as, Every * Diff as) => DefaultDiff (GPatchProd a) a Source # | |
gdiffProd :: forall a as. (IsProductType a as, Every Diff as) => a -> a -> GPatchProd a Source #
gpatchProd :: forall a as. (IsProductType a as, Every Diff as) => GPatchProd a -> a -> Maybe a Source #
gundiffProd :: forall a as. (IsProductType a as, Every Diff as) => GPatchProd a -> (a, a) Source #
Maps
Instances
| Eq (m (ValDiff a)) => Eq (MapDiff m a) Source # | |
| Ord (m (ValDiff a)) => Ord (MapDiff m a) Source # | |
| Read (m (ValDiff a)) => Read (MapDiff m a) Source # | |
| Show (m (ValDiff a)) => Show (MapDiff m a) Source # | |
| Generic (MapDiff m a) Source # | |
| (Diff a, Show a, ShowPatch (Edit a)) => ShowPatch (MapDiff IntMap a) Source # | |
| (Diff a, Ord k, Show k, Show a, ShowPatch (Edit a)) => ShowPatch (MapDiff (Map k) a) Source # | |
| (Diff a, Hashable k, Eq k, Show k, Show a, ShowPatch (Edit a)) => ShowPatch (MapDiff (HashMap k) a) Source # | |
| Diff a => Patch (MapDiff IntMap a) Source # | |
| (Diff a, Ord k) => Patch (MapDiff (Map k) a) Source # | |
| (Hashable k, Eq k, Diff a) => Patch (MapDiff (HashMap k) a) Source # | |
| type Rep (MapDiff m a) Source # | |