@@ -96,18 +96,37 @@ data Sum3 a b c
9696 | C3 c a Int
9797 deriving Generic
9898
99−-- TODO: these compile, but aren't wired in to inspection-testing yet
100−sum3Param0 :: Traversal (Sum3 a b xxx) (Sum3 a b yyy) xxx yyy
101−sum3Param0 = param @0
99+sum3Param0Derived :: Traversal (Sum3 a b xxx) (Sum3 a b yyy) xxx yyy
100+sum3Param0Derived = param @0
102101
103−sum3Param1 :: Traversal (Sum3 a xxx c) (Sum3 a yyy c) xxx yyy
104−sum3Param1 = param @1
102+sum3Param0Manual :: Traversal (Sum3 a b xxx) (Sum3 a b yyy) xxx yyy
103+sum3Param0Manual _ (A3 a1 a2) = pure (A3 a1 a2)
104+sum3Param0Manual _ (B3 s b1 a1 a2 b2) = pure (B3 s b1 a1 a2 b2)
105+sum3Param0Manual f (C3 c a i) = pure (\c' -> C3 c' a i) <*> f c
105106
106−sum3Param2 :: Traversal (Sum3 xxx b c) (Sum3 yyy b c) xxx yyy
107−sum3Param2 = param @2
107+sum3Param1Derived :: Traversal (Sum3 a xxx c) (Sum3 a yyy c) xxx yyy
108+sum3Param1Derived = param @1
108109
109−sum3Param3 :: Traversal (Sum3 a b c) (Sum3 a b c) xxx yyy
110−sum3Param3 = param @3
110+sum3Param1Manual :: Traversal (Sum3 a xxx c) (Sum3 a yyy c) xxx yyy
111+sum3Param1Manual _ (A3 a1 a2) = pure (A3 a1 a2)
112+sum3Param1Manual f (B3 s b1 a1 a2 b2) = pure (\b1' b2' -> B3 s b1' a1 a2 b2') <*> f b1 <*> f b2
113+sum3Param1Manual _ (C3 c a i) = pure (C3 c a i)
114+
115+sum3Param2Derived :: Traversal (Sum3 xxx b c) (Sum3 yyy b c) xxx yyy
116+sum3Param2Derived = param @2
117+
118+sum3Param2Manual :: Traversal (Sum3 xxx b c) (Sum3 yyy b c) xxx yyy
119+sum3Param2Manual f (A3 a1 a2) = pure (\a1' a2' -> A3 a1' a2') <*> f a1 <*> f a2
120+sum3Param2Manual f (B3 s b1 a1 a2 b2) = pure (\a1' a2' -> B3 s b1 a1' a2' b2) <*> f a1 <*> f a2
121+sum3Param2Manual f (C3 c a i) = pure (\a' -> C3 c a' i) <*> f a
122+
123+sum3Param3Derived :: Traversal (Sum3 a b c) (Sum3 a b c) xxx yyy
124+sum3Param3Derived = param @3
125+
126+sum3Param3Manual :: Traversal (Sum3 a b c) (Sum3 a b c) xxx yyy
127+sum3Param3Manual _ (A3 a1 a2) = pure (A3 a1 a2)
128+sum3Param3Manual _ (B3 s b1 a1 a2 b2) = pure (B3 s b1 a1 a2 b2)
129+sum3Param3Manual _ (C3 c a i) = pure (C3 c a i)
111130
112131sum1PrismManual :: Prism Sum1 Sum1 Int Int
113132sum1PrismManual eta = prism g f eta
@@ -132,7 +151,7 @@ sum2PrismManual eta = prism g f eta
132151 where
133152 f s1 = case s1 of
134153 B2 i -> Right i
135− s -> Left s
154+ s -> Left s
136155 g = B2
137156
138157
@@ -141,7 +160,7 @@ sum2PrismManualChar eta = prism g f eta
141160 where
142161 f s1 = case s1 of
143162 A2 i -> Right i
144− s -> Left s
163+ s -> Left s
145164 g = A2
146165
147166-- Note we don't have a catch-all case because of #14684
@@ -151,8 +170,8 @@ subtypePrismManual eta = prism g f eta
151170 f s1 = case s1 of
152171 A c -> Right (A2 c)
153172 B i -> Right (B2 i)
154− C _ -> Left s1
155− D _ -> Left s1
173+ C _ -> Left s1
174+ D _ -> Left s1
156175 g (A2 c) = A c
157176 g (B2 i) = B i
158177
@@ -221,6 +240,10 @@ tests = TestList $ map mkHUnitTest
221240 , $(inspectTest $ 'sum2PrismManualChar === 'sum2TypePrismChar)
222241 , $(inspectTest $ 'sum1PrismManual === 'sum1TypePrism)
223242 , $(inspectTest $ 'intTraversalManual === 'intTraversalDerived)
243+ , $(inspectTest $ 'sum3Param0Manual === 'sum3Param0Derived)
244+ , $(inspectTest $ 'sum3Param1Manual === 'sum3Param1Derived)
245+ , $(inspectTest $ 'sum3Param2Manual === 'sum3Param2Derived)
246+ , $(inspectTest $ 'sum3Param3Manual === 'sum3Param3Derived)
224247 ]
225248
226249-- TODO: add test for traversals over multiple types