@@ -31,7 +31,7 @@ data Record2 = MkRecord2
31data Record3 a = MkRecord3
31data Record3 a = MkRecord3
32 { fieldA :: a
32 { fieldA :: a
33 , fieldB :: Bool
33 , fieldB :: Bool
34− } deriving Generic
34+ } deriving (Generic, Show)
36type Lens' s a = Lens s s a a
36type Lens' s a = Lens s s a a
37type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t
37type Lens s t a b = forall f. Functor f => (a -> f b) -> s -> f t
@@ -42,6 +42,9 @@ fieldALensManual f (MkRecord a b) = (\a' -> MkRecord a' b) <$> f a
42typeChangingManual :: Lens (Record3 a) (Record3 b) a b
42typeChangingManual :: Lens (Record3 a) (Record3 b) a b
43typeChangingManual f (MkRecord3 a b) = (\a' -> MkRecord3 a' b) <$> f a
43typeChangingManual f (MkRecord3 a b) = (\a' -> MkRecord3 a' b) <$> f a
45+typeChangingManualCompose :: Lens (Record3 (Record3 a)) (Record3 (Record3 b)) a b
46+typeChangingManualCompose = typeChangingManual . typeChangingManual
45newtype L s a = L (Lens' s a)
48newtype L s a = L (Lens' s a)
47subtypeLensManual :: Lens' Record Record2
50subtypeLensManual :: Lens' Record Record2
@@ -75,9 +78,12 @@ typeChangingGeneric = field @"fieldA"
75typeChangingGenericPos :: Lens (Record3 a) (Record3 b) a b
78typeChangingGenericPos :: Lens (Record3 a) (Record3 b) a b
76typeChangingGenericPos = position @1
79typeChangingGenericPos = position @1
81+typeChangingGenericCompose :: Lens (Record3 (Record3 a)) (Record3 (Record3 b)) a b
82+typeChangingGenericCompose = field @"fieldA" . field @"fieldA"
78inspect $ 'fieldALensManual === 'fieldALensName
84inspect $ 'fieldALensManual === 'fieldALensName
79inspect $ 'fieldALensManual === 'fieldALensType
85inspect $ 'fieldALensManual === 'fieldALensType
80inspect $ 'fieldALensManual === 'fieldALensPos
86inspect $ 'fieldALensManual === 'fieldALensPos
81inspect $ 'subtypeLensManual === 'subtypeLensGeneric
87inspect $ 'subtypeLensManual === 'subtypeLensGeneric
82inspect $ 'typeChangingManual === 'typeChangingGeneric
88inspect $ 'typeChangingManual === 'typeChangingGeneric
83−--inspect $ 'typeChangingManual === 'typeChangingGenericPos
89+inspect $ 'typeChangingManual === 'typeChangingGenericPos