on master help sign in
Fix performance regression
ea95d4dCsongor Kiss
src/Data/Generics/Internal/Lens.hs+1−3
@@ -18,7 +18,7 @@ module Data.Generics.Internal.Lens where
18import Control.Applicative (Const(..))
18import Control.Applicative (Const(..))
19import Data.Functor.Identity (Identity(..))
19import Data.Functor.Identity (Identity(..))
20import Data.Profunctor (Choice(right'), Profunctor(dimap))
20import Data.Profunctor (Choice(right'), Profunctor(dimap))
21−import GHC.Generics ((:*:)(..), (:+:)(..), Generic(..), K1(..), M1(..), Rep)
21+import GHC.Generics ((:*:)(..), (:+:)(..), Generic(..), M1(..), Rep)
22
22
23-- | Type alias for lens
23-- | Type alias for lens
24type Lens' s a
24type Lens' s a
@@ -76,8 +76,6 @@ repIso = dimap from (fmap to)
76mIso :: Iso' (M1 i c f p) (f p)
76mIso :: Iso' (M1 i c f p) (f p)
77mIso = dimap unM1 (fmap M1)
77mIso = dimap unM1 (fmap M1)
78
78
79−kIso :: Iso' (K1 t a x) a
80−kIso = dimap unK1 (fmap K1)
81
79
82sumIso :: Iso' ((a :+: b) x) (Either (a x) (b x))
80sumIso :: Iso' ((a :+: b) x) (Either (a x) (b x))
83sumIso = dimap f (fmap t)
81sumIso = dimap f (fmap t)
src/Data/Generics/Product/Internal/Fields.hs+4−1
@@ -49,8 +49,11 @@ instance (GHasField field l a, GHasField field r a)
49
49
50 gfield = combine (gfield @field @l) (gfield @field @r)
50 gfield = combine (gfield @field @l) (gfield @field @r)
51
51
52+instance GHasField field (K1 R a) a where
53+ gfield f (K1 x) = fmap K1 (f x)
54+
52instance GHasField field (S1 ('MetaSel ('Just field) upkd str infstr) (Rec0 a)) a where
55instance GHasField field (S1 ('MetaSel ('Just field) upkd str infstr) (Rec0 a)) a where
53− gfield = mIso . kIso
56+ gfield = mIso . gfield @field
54
57
55instance GHasField field f a => GHasField field (M1 D meta f) a where
58instance GHasField field f a => GHasField field (M1 D meta f) a where
56 gfield = mIso . gfield @field
59 gfield = mIso . gfield @field
src/Data/Generics/Product/Internal/Positions.hs+3−6
@@ -42,13 +42,10 @@ import GHC.TypeLits (type (<=?), type (+), Nat)
42class GHasPosition (offset :: Nat) (i :: Nat) (f :: Type -> Type) a | offset i f -> a where
42class GHasPosition (offset :: Nat) (i :: Nat) (f :: Type -> Type) a | offset i f -> a where
43 gposition :: Lens' (f x) a
43 gposition :: Lens' (f x) a
44
44
45−instance GHasPosition i i (S1 meta (Rec0 a)) a where
45+instance GHasPosition i i (K1 R a) a where
46− gposition = mIso . kIso
46+ gposition f (K1 x) = fmap K1 (f x)
47
47
48−instance GHasPosition offset i f a => GHasPosition offset i (M1 D meta f) a where
48+instance GHasPosition offset i f a => GHasPosition offset i (M1 m meta f) a where
49− gposition = mIso . gposition @offset @i
50−
51−instance GHasPosition offset i f a => GHasPosition offset i (M1 C meta f) a where
52 gposition = mIso . gposition @offset @i
49 gposition = mIso . gposition @offset @i
53
50
54instance
51instance