{-| Copyright: © 2021-2023 IOHK, 2024 Cardano Foundation License: Apache-2.0 Delta types are instances of the type class 'Delta'. An instance 'Delta'@ delta@ indicates that the type @delta@ is a delta type of the corresponding base type 'Base'@ delta@. The 'apply' function applies a delta to the base type. Delta types can be transformed into each other using the 'Embedding' type. 'Embedding's can be composed using the 'Semigroupoid' class. Examples: prop> apply (Replace 7) 3 = 7 prop> apply [Append [1], Append [2]] [3] = [1,2,3] prop> apply [Insert 'c', Delete 'b'] (Set.fromList "ab") = Set.fromList "ac" prop> ∀(x :: Set Char). apply [Delete 'b', Insert 'b'] x = apply (Delete 'b') x -} module Data.Delta ( -- * Modules -- | The present module re-exports the following child modules -- for convenience. -- -- Core definitions: -- 'Delta' class, 'apply' function, 'Base' type family. -- -- Core instances: -- 'Replace', 'Data.Monoid.Endo', 'Data.Maybe.Maybe', '[]'. module Data.Delta.Core -- | Delta types for common containers. , module Data.Delta.List , module Data.Delta.Set -- | Embeddings of delta types and helper functions. , module Data.Delta.Embedding -- | Re-export "Data.Semigroupoid" for convenience. , module Data.Semigroupoid ) where import Data.Delta.Core import Data.Delta.Embedding import Data.Delta.List import Data.Delta.Set import Data.Semigroupoid