Wyobraźmy mam następującą listę:Nałożyć dwie fałdy albo pobierające i tylko udaje, gdy oba uda
lst :: [(Bool, Maybe Integer)]
lst = [(True, Just 3), (True, Nothing), (False, Just 12)]
Korzystanie z biblioteki obiektywu, chcę, aby wyodrębnić elementy krotki, ale chcę tylko, że aby odnieść sukces gdy drugim elementem jest Just
. Chcę trochę Optic, split
że działa tak:
> lst ^.. folded.split (_1.to not) (_2._Just)
[(False, 3), (True, 12)]
mogę wdrożyć split
sobie tak:
split :: Getting (First a) s a -> Getting (First b) s b -> Fold s (a, b)
split a b = folding (\x -> (,) <$> (x ^? a) <*> (x ^? b))
... co wydaje się działać. Jednak wygląda na to, że muszę wymyślić nowe koło. Czy jest coś, co zostało dostarczone przez bibliotekę soczewek, która dokonuje tego w równie przyjemny sposób?