packages feed

data-diverse-lens 1.0.0.0 → 1.0.0.1

raw patch · 4 files changed

+49/−32 lines, 4 filesPVP: major bump suggested

API removals or changes: PVP suggests a major version bump

API changes (from Hackage documentation)

- Data.Diverse.Lens.Many: genericItemTag :: forall l a b s t. (HasField l s t a b) => Lens s t a b
- Data.Diverse.Lens.Which: genericFacetTag :: forall l a s proxy. (AsConstructor l s s a a) => proxy l -> Prism' s a
+ Data.Diverse.Lens.Many: class HasItem' a s where item' = typed
+ Data.Diverse.Lens.Many: class HasItemL (l :: k) a b s t | s l -> a, t l -> b, s l b -> t, t l a -> s
+ Data.Diverse.Lens.Many: class HasItemL' (l :: k) a s | s l -> a
+ Data.Diverse.Lens.Many: class HasItemN (n :: Nat) a b s t | s n -> a, t n -> b, s n b -> t, t n a -> s where itemN = position @n
+ Data.Diverse.Lens.Many: class HasItemN' (n :: Nat) a s | s n -> a
+ Data.Diverse.Lens.Many: class HasItemTag (l :: k) a b s t | s l -> a, t l -> b, s l b -> t, t l a -> s
+ Data.Diverse.Lens.Many: class HasItemTag' (l :: k) a s
+ Data.Diverse.Lens.Many: class HasProject (as :: k) (bs :: k) (ss :: k) (ts :: k) a b s t | a -> as, b -> bs, s -> ss, t -> ts, b as -> a, s as -> a, t as -> a, a bs -> b, s bs -> b, t bs -> b, a ss -> s, b ss -> s, t ss -> s, a ts -> t, b ts -> t, s ts -> t, s a b -> t, t a b -> s
+ Data.Diverse.Lens.Many: class HasProject' (as :: k) (ss :: k) a s | a -> as, s -> ss, s as -> a, a ss -> s where project' = super
+ Data.Diverse.Lens.Many: class HasProjectL (ls :: k1) (as :: k) (bs :: k) (ss :: k) (ts :: k) a b s t | a -> as, b -> bs, s -> ss, t -> ts, b as -> a, s as -> a, t as -> a, a bs -> b, s bs -> b, t bs -> b, a ss -> s, b ss -> s, t ss -> s, a ts -> t, b ts -> t, s ts -> t, s ls -> as, t ls -> bs, s ls b -> t, t ls a -> s
+ Data.Diverse.Lens.Many: class HasProjectL' (ls :: k1) (as :: k) (ss :: k) a s | a -> as, s -> ss, s as -> a, a ss -> s, s ls -> as
+ Data.Diverse.Lens.Many: class HasProjectN (ns :: [Nat]) (as :: k) (bs :: k) (ss :: k) (ts :: k) a b s t | a -> as, b -> bs, s -> ss, t -> ts, b as -> a, s as -> a, t as -> a, a bs -> b, s bs -> b, t bs -> b, a ss -> s, b ss -> s, t ss -> s, a ts -> t, b ts -> t, s ts -> t, s ns -> as, t ns -> bs, s ns b -> t, t ns a -> s
+ Data.Diverse.Lens.Many: class HasProjectN' (ns :: [Nat]) (as :: k) (ss :: k) a s | a -> as, s -> ss, s as -> a, a ss -> s, s ns -> as
+ Data.Diverse.Lens.Which: class AsFacet a s where facet = _Typed
+ Data.Diverse.Lens.Which: class AsFacetL (l :: k) a s | s l -> a
+ Data.Diverse.Lens.Which: class AsFacetN (n :: Nat) a s | s n -> a
+ Data.Diverse.Lens.Which: class AsFacetTag (l :: k) a s | s l -> a
+ Data.Diverse.Lens.Which: class AsInject (as :: k) (ss :: k) a s | a -> as, s -> ss, s as -> a, a ss -> s
+ Data.Diverse.Lens.Which: class AsInjectL (ls :: k1) (as :: k) (ss :: k) a s | a -> as, s -> ss, s as -> a, a ss -> s, s ls -> as
+ Data.Diverse.Lens.Which: class AsInjectN (ns :: [Nat]) (as :: k) (ss :: k) a s | a -> as, s -> ss, s as -> a, a ss -> s, s ns -> as
- Data.Diverse.Lens.Many: item' :: HasItem' a s => Lens' s a
+ Data.Diverse.Lens.Many: item' :: (HasItem' a s, HasType a s) => Lens' s a
- Data.Diverse.Lens.Many: itemN :: HasItemN n a b s t => Lens s t a b
+ Data.Diverse.Lens.Many: itemN :: (HasItemN n a b s t, HasPosition n s t a b) => Lens s t a b
- Data.Diverse.Lens.Many: project' :: HasProject' as ss a s => Lens' s a
+ Data.Diverse.Lens.Many: project' :: (HasProject' as ss a s, Subtype a s) => Lens' s a
- Data.Diverse.Lens.Which: facet :: AsFacet a s => Prism' s a
+ Data.Diverse.Lens.Which: facet :: (AsFacet a s, AsType a s) => Prism' s a

Files

README.md view
@@ -8,6 +8,9 @@  # Changelog +* 1.0.0.1+  - Fixed missing exports of the new lens classes.+ * 1.0.0.0   - Removed overlapping instances of Data.Generics lens   - Using typeclass instead of plain functions so that lens can be used for other data types
data-diverse-lens.cabal view
@@ -1,5 +1,5 @@ name:                data-diverse-lens-version:             1.0.0.0+version:             1.0.0.1 synopsis:            Isos & Lens for Data.Diverse.Many and Prisms for Data.Diverse.Which description:         Isos & Lens for Data.Diverse.Many and Prisms for Data.Diverse.Which                      Refer to [ManySpec.hs](https://github.com/louispan/data-diverse-lens/blob/master/test/Data/Diverse/Lens/ManySpec.hs) and [WhichSpec.hs](https://github.com/louispan/data-diverse-lens/blob/master/test/Data/Diverse/Lens/WhichSpec.hs) for example usages.
src/Data/Diverse/Lens/Many.hs view
@@ -20,23 +20,23 @@     -- * Single field     -- ** Lens for a single field     , HasItem(..)-    , item'-    , itemL-    , itemL'-    , itemTag-    , itemTag'-    , genericItemTag-    , itemN-    , itemN'+    , HasItem'(..)+    , HasItemL(..)+    , HasItemL'(..)+    , HasItemTag(..)+    , HasItemTag'(..)+    -- , genericItemTag+    , HasItemN(..)+    , HasItemN'(..)      -- * Multiple fields     -- ** Lens for multiple fields-    , project-    , project'-    , projectL-    , projectL'-    , projectN-    , projectN'+    , HasProject(..)+    , HasProject'(..)+    , HasProjectL(..)+    , HasProjectL'(..)+    , HasProjectN(..)+    , HasProjectN'(..)     ) where  import Control.Lens@@ -107,7 +107,14 @@     itemL = lens (fetchL @l) (replaceL @l)  -- | Variation of 'itemL'' that automatically tags and untags the field.-class HasItemTag' (l :: k) a s | s l -> a where+-- A default implementation using generics is not provided as it make GHC think that @l@ must be type @Symbol@+-- when @l@ can actually be any kind.+-- Create instances of 'HasItemTag'' using "Data.Generics.Product.Fields" as follows:+-- @+-- instance HasField' l Foo a => HasItemTag' l a Foo where+--     itemTag' = field @l+-- @+class HasItemTag' (l :: k) a s where     itemTag' :: Lens' s a  instance (UniqueLabelMember l xs, Tagged l x ~ KindAtLabel l xs) => HasItemTag' l x (Many xs) where@@ -117,10 +124,10 @@ class HasItemTag (l :: k) a b s t | s l -> a, t l -> b, s l b -> t, t l a -> s where     itemTag :: Lens s t a b --- | Make it easy to create an instance of 'itemTag' using 'Data.Generics.Product.Fields'--- NB. This is not a default signature for HasItemTag, as this makes GHC think that l must be type 'Symbol'-genericItemTag :: forall l a b s t. (HasField l s t a b) => Lens s t a b-genericItemTag = field @l+-- -- | Make it easy to create an instance of 'itemTag' using 'Data.Generics.Product.Fields'+-- -- NB. This is not a default signature for HasItemTag, as this makes GHC think that l must be type 'Symbol'+-- genericItemTag :: forall l a b s t. (HasField l s t a b) => Lens s t a b+-- genericItemTag = field @l  instance (UniqueLabelMember l xs, Tagged l x ~ KindAtLabel l xs, ys ~ Replace (Tagged l x) (Tagged l y) xs)   => HasItemTag l x y (Many xs) (Many ys) where
src/Data/Diverse/Lens/Which.hs view
@@ -15,17 +15,17 @@ module Data.Diverse.Lens.Which (       -- * Single type       -- ** Prism-      facet-    , facetL-    , facetTag-    , genericFacetTag-    , facetN+      AsFacet(..)+    , AsFacetL(..)+    , AsFacetTag(..)+    -- , genericFacetTag+    , AsFacetN(..)        -- * Multiple types       -- ** Prism-    , inject-    , injectL-    , injectN+    , AsInject(..)+    , AsInjectL(..)+    , AsInjectN(..)     ) where  import Control.Lens@@ -72,13 +72,20 @@     facetL = prism' (pickL @l) (trialL' @l)  -- | Variation of 'fetchL' specialized to 'Tagged' which automatically tags and untags the field.+-- A default implementation using generics is not provided as it make GHC think that @l@ must be type @Symbol@+-- when @l@ can actually be any kind.+-- Create instances of 'AsFacetTag'' using "Data.Generics.Sum.Constructors" as follows:+-- @+-- instance AsConstructor' l Foo Foo a a => AsFacetTag l a Foo where+--     facetTag = _Ctor @l+-- @ class AsFacetTag (l :: k) a s | s l -> a where     facetTag :: Prism' s a --- | Make it easy to create an instance of 'AsFacetTag' using 'Data.Generics.Sum.Constructors'--- NB. This is not a default signature for AsFacetTag, as this makes GHC think that l must be type 'Symbol', when actually @l@ can be any kind @k@-genericFacetTag :: forall l a s proxy. (AsConstructor l s s a a) => proxy l -> Prism' s a-genericFacetTag _ = _Ctor @l+-- -- | Make it easy to create an instance of 'AsFacetTag' using 'Data.Generics.Sum.Constructors'+-- -- NB. This is not a default signature for AsFacetTag, as this makes GHC think that l must be type 'Symbol', when actually @l@ can be any kind @k@+-- genericFacetTag :: forall l a s proxy. (AsConstructor l s s a a) => Prism' s a+-- genericFacetTag = _Ctor @l  instance (UniqueLabelMember l xs, Tagged l x ~ KindAtLabel l xs) => AsFacetTag l x (Which xs) where     facetTag = prism' (pickTag @l) (trialTag' @l)