packages feed

incremental 0.1.1 → 0.2

raw patch · 3 files changed

+23/−29 lines, 3 filesdep +bytestringdep −extensiblePVP ok

version bump matches the API change (PVP)

Dependencies added: bytestring

Dependencies removed: extensible

API changes (from Hackage documentation)

- Data.Incremental: WrapDelta :: Maybe (Delta (h x)) -> WrapDelta h x
- Data.Incremental: [unwrapDelta] :: WrapDelta h x -> Maybe (Delta (h x))
- Data.Incremental: instance forall k (h :: k -> *) (x :: k). Data.Aeson.Types.FromJSON.FromJSON (Data.Incremental.Delta (h x)) => Data.Aeson.Types.FromJSON.FromJSON (Data.Incremental.WrapDelta h x)
- Data.Incremental: instance forall k (h :: k -> *) (x :: k). Data.Aeson.Types.ToJSON.ToJSON (Data.Incremental.Delta (h x)) => Data.Aeson.Types.ToJSON.ToJSON (Data.Incremental.WrapDelta h x)
- Data.Incremental: instance forall k (h :: k -> *) (x :: k). GHC.Classes.Eq (Data.Incremental.Delta (h x)) => GHC.Classes.Eq (Data.Incremental.WrapDelta h x)
- Data.Incremental: instance forall k (h :: k -> *) (x :: k). GHC.Classes.Ord (Data.Incremental.Delta (h x)) => GHC.Classes.Ord (Data.Incremental.WrapDelta h x)
- Data.Incremental: instance forall k (h :: k -> *) (x :: k). GHC.Show.Show (Data.Incremental.Delta (h x)) => GHC.Show.Show (Data.Incremental.WrapDelta h x)
- Data.Incremental: instance forall k (h :: k -> *) (xs :: [k]). Data.Extensible.Dictionary.WrapForall Data.Incremental.Incremental h xs => Data.Incremental.Incremental (xs Data.Extensible.Struct.:& h)
- Data.Incremental: instance forall k v (h :: v -> *) (kv :: Type.Membership.Internal.Assoc k v). Data.Incremental.Incremental (h (Type.Membership.TargetOf kv)) => Data.Incremental.Incremental (Data.Extensible.Field.Field h kv)
- Data.Incremental: newtype WrapDelta h x
+ Data.Incremental: instance Data.Incremental.Incremental Data.ByteString.Internal.ByteString

Files

README.md view
@@ -1,1 +1,17 @@-# incremental+# incremental: incremental update interface++[![Hackage](https://img.shields.io/hackage/v/incremental.svg)](https://hackage.haskell.org/package/incremental)+![Haskell CI](https://github.com/fumieval/incremental/workflows/Haskell%20CI/badge.svg)+[![Discord](https://img.shields.io/discord/664807830116892674?color=%237095ec&label=Discord&style=plastic)](https://discord.gg/DG93Tgs)++This package provides a typeclass for incremental updates and diffing.++```haskell+class Incremental a where+  -- | the difference type+  type Delta a+  -- | @'maybe' a ('patch' a) ('diff' b a) ≡ b@+  patch :: a -> Delta a -> a+  -- | returns 'Nothing' when there is no update+  diff :: a -> a -> Maybe (Delta a)+```
incremental.cabal view
@@ -1,5 +1,5 @@ name:                incremental-version:             0.1.1+version:             0.2 synopsis:            incremental update library description:         Generic interface for incremental updates homepage:            https://github.com/fumieval/incremental#readme@@ -7,7 +7,7 @@ license-file:        LICENSE author:              Fumiaki Kinoshita maintainer:          fumiexcel@gmail.com-copyright:           2017 Fumiaki Kinoshita+copyright:           2020 Fumiaki Kinoshita category:            Data build-type:          Simple extra-source-files:  README.md@@ -17,10 +17,10 @@   hs-source-dirs:      src   exposed-modules:     Data.Incremental   build-depends:       base >= 4.8 && <5, containers, semigroups, deepseq-    , extensible >= 0.6.1 && <0.8+    , bytestring     , aeson     , text-  ghc-options: -Wall+  ghc-options: -Wall -Wcompat   default-language:    Haskell2010  test-suite incremental-test
src/Data/Incremental.hs view
@@ -17,24 +17,22 @@   , Alter(..)   , Hetero(..)   , Fresh(..)-  , WrapDelta(..) ) where  import Control.Applicative import Control.DeepSeq import qualified Data.Aeson as J+import Data.ByteString (ByteString) import Data.Fixed import Data.Functor.Identity import Data.Semigroup hiding (diff) import qualified Data.IntMap.Strict as IntMap import qualified Data.Map.Strict as Map-import Data.Maybe import Data.Proxy import qualified Data.Set as Set import Data.Void import Data.Int import Data.Word-import Data.Extensible import Data.Text (Text) import Numeric.Natural import GHC.Generics@@ -195,27 +193,6 @@   diff a b = if a /= b then Just b else Nothing; \   } -newtype WrapDelta h x = WrapDelta { unwrapDelta :: Maybe (Delta (h x)) }-deriving instance Show (Delta (h x)) => Show (WrapDelta h x)-deriving instance Eq (Delta (h x)) => Eq (WrapDelta h x)-deriving instance Ord (Delta (h x)) => Ord (WrapDelta h x)-deriving instance J.FromJSON (Delta (h x)) => J.FromJSON (WrapDelta h x)-deriving instance J.ToJSON (Delta (h x)) => J.ToJSON (WrapDelta h x)--deriving instance Incremental (h (TargetOf kv)) => Incremental (Field h kv)--instance WrapForall Incremental h xs => Incremental (xs :& h) where-  type Delta (xs :& h) = xs :& WrapDelta h-  patch r = hmapWithIndexFor (Proxy :: Proxy (Instance1 Incremental h))-    (\i (WrapDelta d) -> maybe (hlookup i r) (patch (hlookup i r)) d)-  diff r = check-    . hmapWithIndexFor (Proxy :: Proxy (Instance1 Incremental h))-    (\i x -> WrapDelta (diff (hlookup i r) x))-    where-      check t-        | getAny $ hfoldMap (Any . isJust . unwrapDelta) t = Just t-        | otherwise = Nothing- TRIVIAL_EQ(Bool) TRIVIAL_EQ(Char) TRIVIAL_EQ(Double)@@ -235,3 +212,4 @@ TRIVIAL_EQ(Word32) TRIVIAL_EQ(Word64) TRIVIAL_EQ(Text)+TRIVIAL_EQ(ByteString)