on master help sign in
Add composition test
commitadfa23efa5ecc29a50f9e9ff535564afb1013338 authorCsongor Kiss <kiss.csongor.kiss@gmail.com> dateSun 3 Dec 2017, 17:03 (9 years ago) parent4cc2db3
1 file changed+8−2
test/Spec.hs+8−2
test/Spec.hs+8−2
@@ -31,7 +31,7 @@ data Record2 = MkRecord2
3131data Record3 a = MkRecord3
3232 { fieldA :: a
3333 , fieldB :: Bool
34− } deriving Generic
34+ } deriving (Generic, Show)
3535
3636type Lens' s a = Lens s s a a
3737type 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
4242typeChangingManual :: Lens (Record3 a) (Record3 b) a b
4343typeChangingManual f (MkRecord3 a b) = (\a' -> MkRecord3 a' b) <$> f a
4444
45+typeChangingManualCompose :: Lens (Record3 (Record3 a)) (Record3 (Record3 b)) a b
46+typeChangingManualCompose = typeChangingManual . typeChangingManual
47+
4548newtype L s a = L (Lens' s a)
4649
4750subtypeLensManual :: Lens' Record Record2
@@ -75,9 +78,12 @@ typeChangingGeneric = field @"fieldA"
7578typeChangingGenericPos :: Lens (Record3 a) (Record3 b) a b
7679typeChangingGenericPos = position @1
7780
81+typeChangingGenericCompose :: Lens (Record3 (Record3 a)) (Record3 (Record3 b)) a b
82+typeChangingGenericCompose = field @"fieldA" . field @"fieldA"
83+
7884inspect $ 'fieldALensManual === 'fieldALensName
7985inspect $ 'fieldALensManual === 'fieldALensType
8086inspect $ 'fieldALensManual === 'fieldALensPos
8187inspect $ 'subtypeLensManual === 'subtypeLensGeneric
8288inspect $ 'typeChangingManual === 'typeChangingGeneric
83−--inspect $ 'typeChangingManual === 'typeChangingGenericPos
89+inspect $ 'typeChangingManual === 'typeChangingGenericPos