From Control.Lens.Unsound
lensProduct :: ALens' s a -> ALens' s b -> Lens' s (a, b)
A lens product. There is no law-abiding way to do this in general. Result is only a valid Lens if the input lenses project disjoint parts of the structure s. Otherwise "you get what you put in" law
view l (set l v s) ≡ v
is violated by
>>> let badLens :: Lens' (Int, Char) (Int, Int); badLens = lensProduct _1 _1
>>> view badLens (set badLens (1,2) (3,'x'))
(2,2)
but we should get (1,2).
Are you looking for alongside?
The answer is yes, we are probably looking for alongside.
From Control.Lens.Unsound
lensProduct :: ALens' s a -> ALens' s b -> Lens' s (a, b)A lens product. There is no law-abiding way to do this in general. Result is only a valid Lens if the input lenses project disjoint parts of the structure s. Otherwise "you get what you put in" law
view l (set l v s) ≡ vis violated by
but we should get
(1,2).Are you looking for alongside?
The answer is yes, we are probably looking for alongside.