data-diverse-lens 3.0.0.2 → 3.1.0.0
raw patch · 4 files changed
+38/−34 lines, 4 filesdep +data-hasPVP ok
version bump matches the API change (PVP)
Dependencies added: data-has
API changes (from Hackage documentation)
- Data.Diverse.Lens.Many: class (HasItem' a s, Replaced a a s ~ s) => HasItem a s where {
- Data.Diverse.Lens.Many: class HasItem' a s
- Data.Diverse.Lens.Many: class (HasItemL' (l :: k) a s, ReplacedL l a a s ~ s) => HasItemL (l :: k) a s | s l -> a where {
- Data.Diverse.Lens.Many: class HasItemL' (l :: k) a s | s l -> a
- Data.Diverse.Lens.Many: class (HasItemN' (n :: Nat) a s, ReplacedN n a a s ~ s) => HasItemN (n :: Nat) a s | s n -> a where {
- Data.Diverse.Lens.Many: class HasItemN' (n :: Nat) a s | s n -> a
- Data.Diverse.Lens.Many: class HasItemL l (Tagged l a) s => HasItemTag (l :: k) a s
- Data.Diverse.Lens.Many: class HasItemL' l (Tagged l a) s => HasItemTag' (l :: k) a s
- Data.Diverse.Lens.Many: instance Data.Diverse.TypeLevel.MemberAt n x xs => Data.Diverse.Lens.Many.HasItemN n x (Data.Diverse.Many.Internal.Many xs)
- Data.Diverse.Lens.Many: instance Data.Diverse.TypeLevel.MemberAt n x xs => Data.Diverse.Lens.Many.HasItemN' n x (Data.Diverse.Many.Internal.Many xs)
- Data.Diverse.Lens.Many: instance Data.Diverse.TypeLevel.UniqueMember x xs => Data.Diverse.Lens.Many.HasItem x (Data.Diverse.Many.Internal.Many xs)
- Data.Diverse.Lens.Many: instance Data.Diverse.TypeLevel.UniqueMember x xs => Data.Diverse.Lens.Many.HasItem' x (Data.Diverse.Many.Internal.Many xs)
- Data.Diverse.Lens.Many: instance forall k (l :: k) (xs :: [*]) x. (Data.Diverse.TypeLevel.UniqueLabelMember l xs, x ~ Data.Diverse.TypeLevel.KindAtLabel l xs) => Data.Diverse.Lens.Many.HasItemL l x (Data.Diverse.Many.Internal.Many xs)
- Data.Diverse.Lens.Many: instance forall k (l :: k) (xs :: [*]) x. (Data.Diverse.TypeLevel.UniqueLabelMember l xs, x ~ Data.Diverse.TypeLevel.KindAtLabel l xs) => Data.Diverse.Lens.Many.HasItemL' l x (Data.Diverse.Many.Internal.Many xs)
- Data.Diverse.Lens.Many: instance forall k (l :: k) a s. Data.Diverse.Lens.Many.HasItemL l (Data.Tagged.Tagged l a) s => Data.Diverse.Lens.Many.HasItemTag l a s
- Data.Diverse.Lens.Many: instance forall k (l :: k) a s. Data.Diverse.Lens.Many.HasItemL' l (Data.Tagged.Tagged l a) s => Data.Diverse.Lens.Many.HasItemTag' l a s
+ Data.Diverse.Lens.Many: class (Has a s, Replaced a a s ~ s) => Had a s where {
+ Data.Diverse.Lens.Many: class (HasL (l :: k) a s, ReplacedL l a a s ~ s) => HadL (l :: k) a s | s l -> a where {
+ Data.Diverse.Lens.Many: class (HasN (n :: Nat) a s, ReplacedN n a a s ~ s) => HadN (n :: Nat) a s | s n -> a where {
+ Data.Diverse.Lens.Many: class HadL l (Tagged l a) s => HadTag (l :: k) a s
+ Data.Diverse.Lens.Many: class Has a t
+ Data.Diverse.Lens.Many: class HasL (l :: k) a s | s l -> a
+ Data.Diverse.Lens.Many: class HasN (n :: Nat) a s | s n -> a
+ Data.Diverse.Lens.Many: class HasL l (Tagged l a) s => HasTag (l :: k) a s
+ Data.Diverse.Lens.Many: getter :: Has a t => t -> a
+ Data.Diverse.Lens.Many: hasLens :: Has a t => Lens t a
+ Data.Diverse.Lens.Many: instance Data.Diverse.TypeLevel.MemberAt n x xs => Data.Diverse.Lens.Many.HadN n x (Data.Diverse.Many.Internal.Many xs)
+ Data.Diverse.Lens.Many: instance Data.Diverse.TypeLevel.MemberAt n x xs => Data.Diverse.Lens.Many.HasN n x (Data.Diverse.Many.Internal.Many xs)
+ Data.Diverse.Lens.Many: instance Data.Diverse.TypeLevel.UniqueMember x xs => Data.Diverse.Lens.Many.Had x (Data.Diverse.Many.Internal.Many xs)
+ Data.Diverse.Lens.Many: instance Data.Diverse.TypeLevel.UniqueMember x xs => Data.Has.Has x (Data.Diverse.Many.Internal.Many xs)
+ Data.Diverse.Lens.Many: instance forall k (l :: k) (xs :: [*]) x. (Data.Diverse.TypeLevel.UniqueLabelMember l xs, x ~ Data.Diverse.TypeLevel.KindAtLabel l xs) => Data.Diverse.Lens.Many.HadL l x (Data.Diverse.Many.Internal.Many xs)
+ Data.Diverse.Lens.Many: instance forall k (l :: k) (xs :: [*]) x. (Data.Diverse.TypeLevel.UniqueLabelMember l xs, x ~ Data.Diverse.TypeLevel.KindAtLabel l xs) => Data.Diverse.Lens.Many.HasL l x (Data.Diverse.Many.Internal.Many xs)
+ Data.Diverse.Lens.Many: instance forall k (l :: k) a s. Data.Diverse.Lens.Many.HadL l (Data.Tagged.Tagged l a) s => Data.Diverse.Lens.Many.HadTag l a s
+ Data.Diverse.Lens.Many: instance forall k (l :: k) a s. Data.Diverse.Lens.Many.HasL l (Data.Tagged.Tagged l a) s => Data.Diverse.Lens.Many.HasTag l a s
+ Data.Diverse.Lens.Many: modifier :: Has a t => (a -> a) -> t -> t
- Data.Diverse.Lens.Many: item :: HasItem a s => Lens s (Replaced a b s) a b
+ Data.Diverse.Lens.Many: item :: Had a s => Lens s (Replaced a b s) a b
- Data.Diverse.Lens.Many: item' :: (HasItem' a s, (HasType a s)) => Lens' s a
+ Data.Diverse.Lens.Many: item' :: Has a s => Lens' s a
- Data.Diverse.Lens.Many: itemL :: HasItemL l a s => Lens s (ReplacedL l a b s) a b
+ Data.Diverse.Lens.Many: itemL :: HadL l a s => Lens s (ReplacedL l a b s) a b
- Data.Diverse.Lens.Many: itemL' :: HasItemL' l a s => Lens' s a
+ Data.Diverse.Lens.Many: itemL' :: HasL l a s => Lens' s a
- Data.Diverse.Lens.Many: itemN :: (HasItemN n a s, (HasPosition n s (ReplacedN n a b s) a b)) => Lens s (ReplacedN n a b s) a b
+ Data.Diverse.Lens.Many: itemN :: (HadN n a s, (HasPosition n s (ReplacedN n a b s) a b)) => Lens s (ReplacedN n a b s) a b
- Data.Diverse.Lens.Many: itemN' :: HasItemN' n a s => Lens' s a
+ Data.Diverse.Lens.Many: itemN' :: HasN n a s => Lens' s a
- Data.Diverse.Lens.Many: itemTag :: HasItemTag l a s => Lens s (ReplacedL l (Tagged l a) (Tagged l b) s) a b
+ Data.Diverse.Lens.Many: itemTag :: HadTag l a s => Lens s (ReplacedL l (Tagged l a) (Tagged l b) s) a b
- Data.Diverse.Lens.Many: itemTag' :: HasItemTag' l a s => Lens' s a
+ Data.Diverse.Lens.Many: itemTag' :: HasTag l a s => Lens' s a
- Data.Diverse.Profunctor.Many: type Itemized a b s t = (HasItem a s, t ~ Replaced a b s)
+ Data.Diverse.Profunctor.Many: type Itemized a b s t = (Had a s, t ~ Replaced a b s)
Files
- README.md +3/−0
- data-diverse-lens.cabal +2/−1
- src/Data/Diverse/Lens/Many.hs +32/−32
- src/Data/Diverse/Profunctor/Many.hs +1/−1
README.md view
@@ -7,6 +7,9 @@ # Changelog +* 3.1.0.0+ - Replaced `HasItem` with `Data.Has`.+ * 3.0.0.2 - Fixed haddock.
data-diverse-lens.cabal view
@@ -1,5 +1,5 @@ name: data-diverse-lens-version: 3.0.0.2+version: 3.1.0.0 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.@@ -29,6 +29,7 @@ , profunctors >= 5.2 , generic-lens >= 0.5.0.0 , lens >= 4+ , data-has >= 0.3 ghc-options: -Wall default-language: Haskell2010
src/Data/Diverse/Lens/Many.hs view
@@ -1,3 +1,5 @@+{-# OPTIONS_GHC -fno-warn-orphans #-}+ {-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE ConstraintKinds #-} {-# LANGUAGE DataKinds #-}@@ -21,15 +23,16 @@ -- * Single field -- ** Lens for a single field- , HasItem(..)- , HasItem'(..)- , HasItemL(..)- , HasItemL'(..)- , HasItemTag(..)- , HasItemTag'(..)+ , Has(..)+ , item'+ , Had(..)+ , HasL(..)+ , HadL(..)+ , HasTag(..)+ , HadTag(..) -- , genericItemTag- , HasItemN(..)- , HasItemN'(..)+ , HasN(..)+ , HadN(..) -- * Multiple fields -- ** Lens for multiple fields@@ -51,6 +54,7 @@ import Data.Diverse.Many import Data.Diverse.TypeLevel import Data.Generics.Product+import Data.Has import Data.Kind import Data.Tagged import GHC.TypeLits@@ -65,29 +69,25 @@ ----------------------------------------------------------------------- --- | 'grab' ('view' 'item') and 'replace'' ('set' 'item'') in 'Lens'' form.+-- | Convient name for 'hasLens' to be consistent with 'Had' typeclass. -- -- @ -- let x = (5 :: Int) './' False './' \'X' './' Just \'O' './' 'nil' -- x '^.' 'item'' \@Int \`shouldBe` 5 -- (x '&' 'item'' \@Int .~ 6) \`shouldBe` (6 :: Int) './' False './' \'X' './' Just \'O' './' 'nil' -- @-class HasItem' a s where- item' :: Lens' s a-- -- | Make it easy to create an instance of 'item' using 'Data.Generics.Product.Typed'- default item' :: (HasType a s) => Lens' s a- item' = typed+item' :: Has a s => Lens' s a+item' = hasLens -instance UniqueMember x xs => HasItem' x (Many xs) where- item' = lens grab replace'+instance UniqueMember x xs => Has x (Many xs) where+ hasLens = lens grab replace' -- | Polymorphic version of 'item''-class (HasItem' a s, Replaced a a s ~ s) => HasItem a s where+class (Has a s, Replaced a a s ~ s) => Had a s where type Replaced a b s item :: Lens s (Replaced a b s) a b -instance (UniqueMember x xs) => HasItem x (Many xs) where+instance (UniqueMember x xs) => Had x (Many xs) where type Replaced x b (Many xs) = Many (Replace x b xs) item = lens grab (replace @x) @@ -101,16 +101,16 @@ -- -- 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 'HasItemL'' using "Data.Generics.Product.Fields" as follows:+-- Create instances of 'HasL' using "Data.Generics.Product.Fields" as follows: -- @ -- instance HasField' l Foo a => itemL' l a Foo where -- itemL' = field @l -- default itemL' :: forall (l :: Symbol) a s. (HasField' l s a) => Lens' s a -- itemL' = field @l-class HasItemL' (l :: k) a s | s l -> a where+class HasL (l :: k) a s | s l -> a where itemL' :: Lens' s a -instance (UniqueLabelMember l xs, x ~ KindAtLabel l xs) => HasItemL' l x (Many xs) where+instance (UniqueLabelMember l xs, x ~ KindAtLabel l xs) => HasL l x (Many xs) where itemL' = lens (grabL @l) (replaceL' @l) -- | Polymorphic version of 'itemL''@@ -119,28 +119,28 @@ -- let x = (5 :: Int) './' Tagged @Foo False './' Tagged \@Bar \'X' './' 'nil' -- (x '&' 'itemL' \@Foo '.~' \"foo") \`shouldBe` (5 :: Int) './' \"foo" './' Tagged \@Bar \'X' './' 'nil' -- @-class (HasItemL' (l :: k) a s, ReplacedL l a a s ~ s) => HasItemL (l :: k) a s | s l -> a where+class (HasL (l :: k) a s, ReplacedL l a a s ~ s) => HadL (l :: k) a s | s l -> a where type ReplacedL l a b s itemL :: Lens s (ReplacedL l a b s) a b -instance (UniqueLabelMember l xs, x ~ KindAtLabel l xs) => HasItemL l x (Many xs) where+instance (UniqueLabelMember l xs, x ~ KindAtLabel l xs) => HadL l x (Many xs) where type ReplacedL l x b (Many xs) = Many (Replace (KindAtLabel l xs) b xs) itemL = lens (grabL @l) (replaceL @l) -- | Variation of 'itemL'' that automatically tags and untags a Tagged field. -- @-class HasItemL' l (Tagged l a) s => HasItemTag' (l :: k) a s where+class HasL l (Tagged l a) s => HasTag (l :: k) a s where itemTag' :: Lens' s a -instance HasItemL' l (Tagged l a) s => HasItemTag' (l :: k) a s where+instance HasL l (Tagged l a) s => HasTag (l :: k) a s where itemTag' = itemL' @l . iso unTagged Tagged -- | Polymorphic version of 'itemTag'' -- @-class HasItemL l (Tagged l a) s => HasItemTag (l :: k) a s where+class HadL l (Tagged l a) s => HadTag (l :: k) a s where itemTag :: Lens s (ReplacedL l (Tagged l a) (Tagged l b) s) a b -instance HasItemL l (Tagged l a) s => HasItemTag (l :: k) a s where+instance HadL l (Tagged l a) s => HadTag (l :: k) a s where itemTag = itemL @l . iso unTagged (Tagged @l) -- | 'grabN' ('view' 'item') and 'replaceN'' ('set' 'item'') in 'Lens'' form.@@ -150,14 +150,14 @@ -- x '^.' 'itemN'' \@0 \`shouldBe` 5 -- (x '&' 'itemN'' \@0 '.~' 6) \`shouldBe` (6 :: Int) './' False './' \'X' './' Just \'O' './' (6 :: Int) './' Just \'A' './' 'nil' -- @-class HasItemN' (n :: Nat) a s | s n -> a where+class HasN (n :: Nat) a s | s n -> a where itemN' :: Lens' s a -instance (MemberAt n x xs) => HasItemN' n x (Many xs) where+instance (MemberAt n x xs) => HasN n x (Many xs) where itemN' = lens (grabN @n) (replaceN' @n) -- | Polymorphic version of 'itemN''-class (HasItemN' (n :: Nat) a s, ReplacedN n a a s ~ s) => HasItemN (n :: Nat) a s | s n -> a where+class (HasN (n :: Nat) a s, ReplacedN n a a s ~ s) => HadN (n :: Nat) a s | s n -> a where type ReplacedN n a b s itemN :: Lens s (ReplacedN n a b s) a b @@ -166,7 +166,7 @@ itemN = position @n instance (MemberAt n x xs)- => HasItemN n x (Many xs) where+ => HadN n x (Many xs) where type ReplacedN n x b (Many xs) = Many (ReplaceIndex n x b xs) itemN = lens (grabN @n) (replaceN @n)
src/Data/Diverse/Profunctor/Many.hs view
@@ -34,7 +34,7 @@ -- | A friendlier constraint synonym for 'itemized'. type Itemized a b s t =- ( HasItem a s+ ( Had a s , t ~ Replaced a b s )