<div dir="ltr">On Fri, Feb 10, 2017 at 7:53 PM, Anthony Clayden <span dir="ltr"><<a href="mailto:anthony_clayden@clear.net.nz" target="_blank">anthony_clayden@clear.net.nz</a>></span> wrote:<br><div class="gmail_extra"><div class="gmail_quote"><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><br>
Certainly (.) for lenses works 'backwards'<br>
(i.e. suffix style)<br>
compared to function-prefix style.<br>
(As any Lens tutorial will say.)<br></blockquote><div><br></div><div>Those tutorials are oversimplifying. Lenses (and their relatives) transform operations, not values. Composition of lenses is exactly like composition of functions, with the inner-most operation on the right. A lens foo :: Lens O I transforms an operation on I into an operation on O. A composition outer.inner turns an operation on the target of inner into an operation on the source of outer.</div><div><br></div><div>This is demonstrated by the way over distributes with (.):</div><div><br></div><div>    over (outer . inner) = over outer . over inner</div><div><br></div><div>What confuses people is view, which is contravariant:</div><div><br></div><div>    view (outer . inner) = view inner . view outer</div><div><br></div><div>but you can’t avoid having one of over and view be contravariant.</div></div><div><br></div>-- <br><div class="gmail_signature" data-smartmail="gmail_signature">Dave Menendez <<a href="mailto:dave@zednenem.com" target="_blank">dave@zednenem.com</a>><br><<a href="http://www.eyrie.org/~zednenem/" target="_blank">http://www.eyrie.org/~zednenem/</a>></div>
</div></div>