packages feed

generic-lens 0.1.0.0 → 0.2.0.0

raw patch · 6 files changed

+22/−10 lines, 6 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

- Data.Generics.Record: subtype :: forall sup sub. Subtype sub sup => Lens' sub sup
- Data.Generics.Record.Subtype: subtype :: forall sup sub. Subtype sub sup => Lens' sub sup
+ Data.Generics.Internal.Lens: combine :: Lens' (s x) a -> Lens' (t x) a -> Lens' ((:+:) s t x) a
+ Data.Generics.Internal.Lens: infixl 8 ^.
+ Data.Generics.Record: super :: forall sup sub. Subtype sub sup => Lens' sub sup
+ Data.Generics.Record.HasField: instance (Data.Generics.Record.HasField.GHasField field s a, Data.Generics.Record.HasField.GHasField field s' a) => Data.Generics.Record.HasField.GHasField field (s GHC.Generics.:+: s') a
+ Data.Generics.Record.Subtype: super :: forall sup sub. Subtype sub sup => Lens' sub sup

Files

generic-lens.cabal view
@@ -1,6 +1,6 @@ name:                generic-lens -version:             0.1.0.0+version:             0.2.0.0  synopsis:            Generic data-structure operations exposed as lenses. 
src/Data/Generics/Internal/Lens.hs view
@@ -16,7 +16,7 @@ module Data.Generics.Internal.Lens where  import Control.Applicative  ( Const (..) )-import GHC.Generics         ( (:*:) (..), Generic (..), M1 (..), Rep )+import GHC.Generics         ( (:*:) (..), Generic (..), M1 (..), Rep, (:+:) (..) )  -- | Identity functor newtype Identity a@@ -34,6 +34,7 @@ -- | Getting (^.) :: s -> ((a -> Const a a) -> s -> Const a s) -> a s ^. l = getConst (l Const s)+infixl 8 ^.  -- | Setting set :: ((a -> Identity b) -> s -> Identity t) -> b -> s -> t@@ -49,6 +50,10 @@ second :: Lens' ((a :*: b) x) (b x) second f (a :*: b)   = fmap (a :*:) (f b)++combine :: Lens' (s x) a -> Lens' (t x) a -> Lens' ((:+:) s t x) a+combine sa _ f (L1 s) = fmap (\a -> L1 (set sa a s)) (f (s ^. sa))+combine _ ta f (R1 t) = fmap (\a -> R1 (set ta a t)) (f (t ^. ta))  -- | A type and its generic representation are isomorphic repIso :: Generic a => Lens' a (Rep a x)
src/Data/Generics/Record.hs view
@@ -18,7 +18,7 @@   (     -- * Subtype relationship     Subtype  (..)-  , subtype+  , super      -- * Magic lens   , HasField (..)
src/Data/Generics/Record/HasField.hs view
@@ -118,6 +118,9 @@ instance (GHasFieldProd field s s' a (Contains field s)) => GHasField field (s :*: s') a where   glabel = prodLabel @field @_ @_ @_ @(Contains field s) +instance (GHasField field s a, GHasField field s' a) => GHasField field (s :+: s') a where+  glabel = combine (glabel @field @s) (glabel @field @s')+ instance GHasField field (S1 ('MetaSel ('Just field) p f b) (Rec0 a)) a where   glabel = lensM . glabel @field 
src/Data/Generics/Record/Internal/Contains.hs view
@@ -1,11 +1,9 @@ {-# LANGUAGE AllowAmbiguousTypes #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE FlexibleInstances #-}-{-# LANGUAGE FunctionalDependencies #-} {-# LANGUAGE PolyKinds #-} {-# LANGUAGE Rank2Types #-} {-# LANGUAGE ScopedTypeVariables #-}-{-# LANGUAGE TypeApplications #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE UndecidableInstances #-}@@ -38,6 +36,8 @@     = 'Just t   Contains field (f :*: g)     = Contains field f <|> Contains field g+  Contains field (f :+: g)+    = Contains field f <&> Contains field g   Contains field (S1 _ _)     = 'Nothing   Contains field (C1 m f)@@ -56,4 +56,8 @@ type family (a :: Maybe k) <|> (b :: Maybe k) :: Maybe k where   'Just x <|> _  = 'Just x   _ <|> b = b++type family (a :: Maybe k) <&> (b :: Maybe k) :: Maybe k where+  'Just x <&> 'Just x  = 'Just x+  _ <&> _ = 'Nothing 
src/Data/Generics/Record/Subtype.hs view
@@ -49,7 +49,7 @@ ----------------------------------------------------------------------------- module Data.Generics.Record.Subtype   ( Subtype (..)-  , subtype+  , super   ) where  import Data.Generics.Record.HasField@@ -86,13 +86,13 @@ -- | Structural subtype lens. Given a subtype relationship @sub :< sup@, --   we can focus on the @sub@ structure of @sup@. ----- >>> human ^. subtype @Animal+-- >>> human ^. super @Animal -- Animal {name = "Tunyasz", age = 50} ----- >>> set (subtype @Animal) (Animal "dog" 10) human+-- >>> set (super @Animal) (Animal "dog" 10) human -- Human {name = "dog", age = 10, address = "London"}-subtype :: forall sup sub. Subtype sub sup => Lens' sub sup-subtype f sub = fmap (flip smash sub) (f (upcast sub))+super :: forall sup sub. Subtype sub sup => Lens' sub sup+super f sub = fmap (flip smash sub) (f (upcast sub))  -------------------------------------------------------------------------------- -- * Generic upcasting