delta-types-1.0.0.0: Delta types, also known as change actions.
Copyright© 2021-2023 IOHK 2024 Cardano Foundation
LicenseApache-2.0
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.Delta.Core

Description

 
Synopsis

Documentation

class Delta delta where Source #

Type class for delta types.

Associated Types

type Base delta :: Type Source #

Base type for which delta represents a delta. This is implemented as a type family, so that we can have multiple delta types for the same base type.

Methods

apply :: delta -> Base delta -> Base delta Source #

Apply a delta to the base type.

Whenever the type delta is a Semigroup, we require that

apply (d1 <> d2) = apply d1 . apply d2

This means that deltas are applied right-to-left: d1 is applied after d2.

Whenever the type delta is a Monoid, we require that

apply mempty = id

Instances

Instances details
Delta (Endo a) Source #

Endo is the most general delta, which allows any change.

Instance details

Defined in Data.Delta.Core

Associated Types

type Base (Endo a) Source #

Methods

apply :: Endo a -> Base (Endo a) -> Base (Endo a) Source #

Delta delta => Delta (NonEmpty delta) Source #

For convenience, a nonempty list of deltas can be applied like a list of deltas.

Remember that deltas are applied right-to-left.

Instance details

Defined in Data.Delta.Core

Associated Types

type Base (NonEmpty delta) Source #

Methods

apply :: NonEmpty delta -> Base (NonEmpty delta) -> Base (NonEmpty delta) Source #

Delta (NoChange a) Source #
apply NoChange a = a
Instance details

Defined in Data.Delta.Core

Associated Types

type Base (NoChange a) Source #

Methods

apply :: NoChange a -> Base (NoChange a) -> Base (NoChange a) Source #

Delta (Replace a) Source #
apply (Replace a) _ = a
Instance details

Defined in Data.Delta.Core

Associated Types

type Base (Replace a) Source #

Methods

apply :: Replace a -> Base (Replace a) -> Base (Replace a) Source #

Delta (DeltaList a) Source #
apply (Append xs) ys = xs ++ ys
Instance details

Defined in Data.Delta.List

Associated Types

type Base (DeltaList a) Source #

Methods

apply :: DeltaList a -> Base (DeltaList a) -> Base (DeltaList a) Source #

Ord a => Delta (DeltaSet a) Source # 
Instance details

Defined in Data.Delta.Set

Associated Types

type Base (DeltaSet a) Source #

Methods

apply :: DeltaSet a -> Base (DeltaSet a) -> Base (DeltaSet a) Source #

Ord a => Delta (DeltaSet1 a) Source # 
Instance details

Defined in Data.Delta.Set

Associated Types

type Base (DeltaSet1 a) Source #

Methods

apply :: DeltaSet1 a -> Base (DeltaSet1 a) -> Base (DeltaSet1 a) Source #

Delta delta => Delta (Maybe delta) Source #

A delta can be optionally applied.

Instance details

Defined in Data.Delta.Core

Associated Types

type Base (Maybe delta) Source #

Methods

apply :: Maybe delta -> Base (Maybe delta) -> Base (Maybe delta) Source #

Delta delta => Delta [delta] Source #

A list of deltas can be applied like a single delta. This overloading of apply is very convenient.

Order is important: The head of the list is applied last, so deltas are applied right-to-left. Hence, apply is a morphism

apply []         = id
apply (d1 ++ d2) = apply d1 . apply d2
Instance details

Defined in Data.Delta.Core

Associated Types

type Base [delta] Source #

Methods

apply :: [delta] -> Base [delta] -> Base [delta] Source #

(Ord key, Delta da) => Delta (DeltaMap key da) Source # 
Instance details

Defined in Data.Delta.Map

Associated Types

type Base (DeltaMap key da) Source #

Methods

apply :: DeltaMap key da -> Base (DeltaMap key da) -> Base (DeltaMap key da) Source #

(Delta d1, Delta d2) => Delta (d1, d2) Source #

A pair of deltas represents a delta for a pair.

Instance details

Defined in Data.Delta.Core

Associated Types

type Base (d1, d2) Source #

Methods

apply :: (d1, d2) -> Base (d1, d2) -> Base (d1, d2) Source #

(Delta d1, Delta d2, Delta d3) => Delta (d1, d2, d3) Source #

A triple of deltas represents a delta for a triple.

Instance details

Defined in Data.Delta.Core

Associated Types

type Base (d1, d2, d3) Source #

Methods

apply :: (d1, d2, d3) -> Base (d1, d2, d3) -> Base (d1, d2, d3) Source #

(Delta d1, Delta d2, Delta d3, Delta d4) => Delta (d1, d2, d3, d4) Source #

A 4-tuple of deltas represents a delta for a 4-tuple.

Instance details

Defined in Data.Delta.Core

Associated Types

type Base (d1, d2, d3, d4) Source #

Methods

apply :: (d1, d2, d3, d4) -> Base (d1, d2, d3, d4) -> Base (d1, d2, d3, d4) Source #

data NoChange (a :: Type) Source #

The least general delta, where nothing is changed.

Constructors

NoChange 

Instances

Instances details
Show (NoChange a) Source # 
Instance details

Defined in Data.Delta.Core

Methods

showsPrec :: Int -> NoChange a -> ShowS #

show :: NoChange a -> String #

showList :: [NoChange a] -> ShowS #

Delta (NoChange a) Source #
apply NoChange a = a
Instance details

Defined in Data.Delta.Core

Associated Types

type Base (NoChange a) Source #

Methods

apply :: NoChange a -> Base (NoChange a) -> Base (NoChange a) Source #

Eq (NoChange a) Source # 
Instance details

Defined in Data.Delta.Core

Methods

(==) :: NoChange a -> NoChange a -> Bool #

(/=) :: NoChange a -> NoChange a -> Bool #

Ord (NoChange a) Source # 
Instance details

Defined in Data.Delta.Core

Methods

compare :: NoChange a -> NoChange a -> Ordering #

(<) :: NoChange a -> NoChange a -> Bool #

(<=) :: NoChange a -> NoChange a -> Bool #

(>) :: NoChange a -> NoChange a -> Bool #

(>=) :: NoChange a -> NoChange a -> Bool #

max :: NoChange a -> NoChange a -> NoChange a #

min :: NoChange a -> NoChange a -> NoChange a #

type Base (NoChange a) Source # 
Instance details

Defined in Data.Delta.Core

type Base (NoChange a) = a

newtype Replace a Source #

Trivial delta type for the type a that replaces the value wholesale.

Constructors

Replace a 

Instances

Instances details
Semigroup (Replace a) Source #

Combine replacements. The first argument takes precedence. Hence, apply is a morphism:

apply (Replace a <> Replace b) = apply (Replace a) . apply (Replace b)

More strongly, we have

apply (Replace a <> _) = apply (Replace a)
Instance details

Defined in Data.Delta.Core

Methods

(<>) :: Replace a -> Replace a -> Replace a #

sconcat :: NonEmpty (Replace a) -> Replace a #

stimes :: Integral b => b -> Replace a -> Replace a #

Show a => Show (Replace a) Source # 
Instance details

Defined in Data.Delta.Core

Methods

showsPrec :: Int -> Replace a -> ShowS #

show :: Replace a -> String #

showList :: [Replace a] -> ShowS #

Delta (Replace a) Source #
apply (Replace a) _ = a
Instance details

Defined in Data.Delta.Core

Associated Types

type Base (Replace a) Source #

Methods

apply :: Replace a -> Base (Replace a) -> Base (Replace a) Source #

Eq a => Eq (Replace a) Source # 
Instance details

Defined in Data.Delta.Core

Methods

(==) :: Replace a -> Replace a -> Bool #

(/=) :: Replace a -> Replace a -> Bool #

Ord a => Ord (Replace a) Source # 
Instance details

Defined in Data.Delta.Core

Methods

compare :: Replace a -> Replace a -> Ordering #

(<) :: Replace a -> Replace a -> Bool #

(<=) :: Replace a -> Replace a -> Bool #

(>) :: Replace a -> Replace a -> Bool #

(>=) :: Replace a -> Replace a -> Bool #

max :: Replace a -> Replace a -> Replace a #

min :: Replace a -> Replace a -> Replace a #

type Base (Replace a) Source # 
Instance details

Defined in Data.Delta.Core

type Base (Replace a) = a