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 +8/−0
- generic-data-surgery.cabal +3/−17
- src/Generic/Data/Surgery.hs +16/−27
- src/Generic/Data/Surgery/Internal.hs +0/−26
- test/lens-surgery.hs +0/−30
+ 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 ())- ]