Hãy tưởng tượng tôi có danh sách sau đây:Áp dụng hai nếp hoặc Getters và chỉ thành công khi cả hai thành công
lst :: [(Bool, Maybe Integer)]
lst = [(True, Just 3), (True, Nothing), (False, Just 12)]
Sử dụng thư viện ống kính, tôi muốn trích xuất các phần tử của các bộ, nhưng tôi chỉ muốn nó thành công khi phần tử thứ hai là Just
. Tôi muốn có một số quang, split
mà làm việc như thế này:
> lst ^.. folded.split (_1.to not) (_2._Just)
[(False, 3), (True, 12)]
tôi có thể thực hiện split
bản thân mình như thế này:
split :: Getting (First a) s a -> Getting (First b) s b -> Fold s (a, b)
split a b = folding (\x -> (,) <$> (x ^? a) <*> (x ^? b))
... mà dường như để làm việc. Tuy nhiên, điều này có vẻ như tôi phải tái phát minh ra bánh xe. Có một cái gì đó đã được cung cấp bởi thư viện ống kính mà thực hiện điều này một cách tốt đẹp không?