packages feed

generic-data-surgery 0.1.0.0 → 0.2.0.0

raw patch · 5 files changed

+27/−100 lines, 5 filesdep −generic-lensdep ~basedep ~generic-dataPVP ok

version bump matches the API change (PVP)

Dependencies removed: generic-lens

Dependency ranges changed: base, generic-data

API changes (from Hackage documentation)

- Generic.Data.Surgery: onData :: (UnifyRep (Rep a) (Rep b), UnifyRep (Rep a) (Rep b)) => p a b -> p a b
- Generic.Data.Surgery.Internal: class UnifyRep (f :: k -> *) (g :: k -> *)
- Generic.Data.Surgery.Internal: instance forall k (g' :: k -> *) (c :: GHC.Generics.Meta) (g :: k -> *) (f :: k -> *). (g' Data.Type.Equality.~ GHC.Generics.M1 GHC.Generics.C c g, Generic.Data.Surgery.Internal.UnifyRep f g) => Generic.Data.Surgery.Internal.UnifyRep (GHC.Generics.M1 GHC.Generics.C c f) g'
- Generic.Data.Surgery.Internal: instance forall k (g' :: k -> *) (c :: GHC.Generics.Meta) (g :: k -> *) (f :: k -> *). (g' Data.Type.Equality.~ GHC.Generics.M1 GHC.Generics.D c g, Generic.Data.Surgery.Internal.UnifyRep f g) => Generic.Data.Surgery.Internal.UnifyRep (GHC.Generics.M1 GHC.Generics.D c f) g'
- Generic.Data.Surgery.Internal: instance forall k (g' :: k -> *) (c :: GHC.Generics.Meta) (g :: k -> *) (f :: k -> *). (g' Data.Type.Equality.~ GHC.Generics.M1 GHC.Generics.S c g, Generic.Data.Surgery.Internal.UnifyRep f g) => Generic.Data.Surgery.Internal.UnifyRep (GHC.Generics.M1 GHC.Generics.S c f) g'
- Generic.Data.Surgery.Internal: instance forall k (g' :: k -> *) (g1 :: k -> *) (g2 :: k -> *) (f1 :: k -> *) (f2 :: k -> *). (g' Data.Type.Equality.~ (g1 GHC.Generics.:*: g2), Generic.Data.Surgery.Internal.UnifyRep f1 g1, Generic.Data.Surgery.Internal.UnifyRep f2 g2) => Generic.Data.Surgery.Internal.UnifyRep (f1 GHC.Generics.:*: f2) g'
- Generic.Data.Surgery.Internal: instance forall k (g' :: k -> *) (g1 :: k -> *) (g2 :: k -> *) (f1 :: k -> *) (f2 :: k -> *). (g' Data.Type.Equality.~ (g1 GHC.Generics.:+: g2), Generic.Data.Surgery.Internal.UnifyRep f1 g1, Generic.Data.Surgery.Internal.UnifyRep f2 g2) => Generic.Data.Surgery.Internal.UnifyRep (f1 GHC.Generics.:+: f2) g'
- Generic.Data.Surgery.Internal: instance forall k (g' :: k -> *) i b a. (g' Data.Type.Equality.~ GHC.Generics.K1 i b) => Generic.Data.Surgery.Internal.UnifyRep (GHC.Generics.K1 i a) g'
- Generic.Data.Surgery.Internal: instance forall k (g' :: k -> *). (g' Data.Type.Equality.~ GHC.Generics.U1) => Generic.Data.Surgery.Internal.UnifyRep GHC.Generics.U1 g'
- Generic.Data.Surgery.Internal: instance forall k (g' :: k -> *). (g' Data.Type.Equality.~ GHC.Generics.V1) => Generic.Data.Surgery.Internal.UnifyRep GHC.Generics.V1 g'
- Generic.Data.Surgery.Internal: onData :: (UnifyRep (Rep a) (Rep b), UnifyRep (Rep a) (Rep b)) => p a b -> p a b

Files

+ CHANGELOG.md view
@@ -0,0 +1,8 @@+# 0.2.0.0++- Compatibility with generic-data 0.4.0.0+- Removed `onData` (moved to generic-data 0.4.0.0).++# 0.1.0.0++Initial version
generic-data-surgery.cabal view
@@ -1,5 +1,5 @@ name:                generic-data-surgery-version:             0.1.0.0+version:             0.2.0.0 synopsis:            Surgery for generic data types description:   Transform data types before passing them to generic functions.@@ -11,10 +11,10 @@ copyright:           2018 Li-yao Xia category:            Other build-type:          Simple-extra-source-files:  README.md+extra-source-files:  README.md, CHANGELOG.md cabal-version:       >=1.10 tested-with:-  GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.1, GHC == 8.6.2+  GHC == 8.0.2, GHC == 8.2.2, GHC == 8.4.4, GHC == 8.6.1, GHC == 8.6.3  library   hs-source-dirs:      src@@ -40,20 +40,6 @@   ghc-options: -Wall   default-language: Haskell2010   type: exitcode-stdio-1.0--test-suite lens-surgery-test-  hs-source-dirs: test-  main-is: lens-surgery.hs-  build-depends:-    tasty,-    tasty-hunit,-    generic-data-surgery,-    generic-lens,-    base-  ghc-options: -Wall-  default-language: Haskell2010-  type: exitcode-stdio-1.0-  buildable: False  source-repository head   type:     git
src/Generic/Data/Surgery.hs view
@@ -15,35 +15,26 @@ -- Note that constructors and fields are indexed from zero.  module Generic.Data.Surgery-  ( Data+  ( -- * Surgeries from generic-data and generic-lens+    --+    -- | The library <https://hackage.haskell.org/package/generic-data generic-data>+    -- has a "Generic.Data.Microsurgery" module (since 0.4.0.0) to modify some+    -- metadata of generic representations.+    --+    -- See also the documentation in that module about surgeries using+    -- <https://hackage.haskell.org/package/generic-data generic-lens>,+    -- when you want to /update/ fields, rather than remove or insert them. +    -- * Synthetic data types++    Data+   , toData   , fromData-  , onData -    --   Microsurgery--    --   One common and simple situation is to wrap a couple of fields in some-    -- newtype. You can leverage the @generic-lens@ library with the three-    -- functions below.-    ---    -- @-    -- over :: ASetter s t a b -> (a -> b) -> s -> t  -- from lens or microlens-    -- field :: HasField s t a b => Lens s t a b      -- from generic-lens-    -- @-    ---    -- For example, to wrap a field named @hidden@ in a newtype like-    -- 'Generic.Data.Opaque' in some record type @R@:-    ---    -- @-    -- 'onData' (over (field @"hidden") 'Generic.Data.Opaque') . 'toData'-    --   :: R -> Data _ _-    -- @-    ---    -- The result is a type, that from the point of view of "GHC.Generics"-    -- looks just like @R@ but with the field @hidden@ wrapped.+    -- * Surgeries -    -- * Getting into the operating room+    -- ** Getting into the operating room   , OR    , toOR@@ -53,8 +44,6 @@    , OROf -    -- * Surgeries-     -- ** Unnamed fields   , removeCField   , insertCField@@ -117,6 +106,6 @@   , ModConstrT   ) where -import Generic.Data.Internal.Data+import Generic.Data.Types (Data(..), toData, fromData)  import Generic.Data.Surgery.Internal
src/Generic/Data/Surgery/Internal.hs view
@@ -1041,29 +1041,3 @@ instance (t ~ (a, b, c, d, e))       => IsTuple 5 t instance (t ~ (a, b, c, d, e, f))    => IsTuple 6 t instance (t ~ (a, b, c, d, e, f, g)) => IsTuple 7 t---- | Unify the "spines" of two generic representations (the "spine" is--- everything except the field types).-class UnifyRep (f :: k -> *) (g :: k -> *)-instance (g' ~ M1 D c g, UnifyRep f g) => UnifyRep (M1 D c f) g'-instance (g' ~ M1 C c g, UnifyRep f g)-  => UnifyRep (M1 C c f) g'-instance (g' ~ M1 S c g, UnifyRep f g) => UnifyRep (M1 S c f) g'-instance (g' ~ (g1 :+: g2), UnifyRep f1 g1, UnifyRep f2 g2)-  => UnifyRep (f1 :+: f2) g'-instance (g' ~ (g1 :*: g2), UnifyRep f1 g1, UnifyRep f2 g2)-  => UnifyRep (f1 :*: f2) g'-instance (g' ~ K1 i b) => UnifyRep (K1 i a) g'-instance (g' ~ U1) => UnifyRep U1 g'-instance (g' ~ V1) => UnifyRep V1 g'---- | Can be used with @generic-lens@ for type-changing field updates.------ A specialization of the identity function to be used to fix types--- of functions using 'Data' as input or output, unifying the "spines" of input--- and output generic representations (the "spine" is everything except field--- types, which may thus change).-onData-  :: (UnifyRep (Rep a) (Rep b), UnifyRep (Rep a) (Rep b))-  => p a b -> p a b-onData = id
− test/lens-surgery.hs
@@ -1,30 +0,0 @@-{-# LANGUAGE-    DataKinds,-    DeriveGeneric,-    TypeApplications,-    TypeOperators #-}--{-# OPTIONS_GHC -Wno-unused-top-binds #-}--import GHC.Generics (Generic)-import Test.Tasty-import Test.Tasty.HUnit--import Data.Generics.Product (field)-import Data.Generics.Internal.VL.Lens--import Generic.Data.Surgery (onData, toData)--data T a = R { f :: a } deriving (Generic, Show)--main :: IO ()-main = defaultMain test--show' :: Show (f ()) => f () -> String-show' = show--test :: TestTree-test = testGroup "lens-surgery"-  [ testCase "update" $-      "R {f = 42}" @?= (show' . onData (field @"f" .~ (42 :: Int)) . toData) (R ())-  ]