[Haskell-cafe] ANNOUNCE: lens-family 2.0.0 anniversary edition!

roconnor at theorem.ca roconnor at theorem.ca
Sat Jul 20 19:48:26 UTC 2019


On Fri, 19 Jul 2019, Carter Schonwald wrote:

> Hey Russell, is there any expository or tech reporty exposition of the differences in formulation and the why's wherefores of the new major release? (i'm genuinely curious since i'm quite
> wimpy in the lens foo)

There hasn't been a change in formulation of used in lens-family, rather 
the grate-like and adapter-like new formulations have been added along 
side.

Perhaps you are asking about the different formulations between different 
lens libraries?  I'm not sure what the best expositions are.  "Profunctor 
Optics: Modular Data Accessors" by Pickering, Gibbons, and Wu at 
<https://www.cs.ox.ac.uk/people/jeremy.gibbons/publications/poptics.pdf> 
seems like a reasonably good presentation of the implementations.

A library user is somewhat insualted from the details of the different 
implementations through the library combinators, but some differences 
remain.  For example, in lens-family's van Laarhoven implementation, I 
require explicit casting between Grate-like, Adatper-like, and Lens-like 
optics, whereas a profunctor based implementation would treat all three 
class of optics uniformly.  That said, you could have a van Laarhoven 
implementaion that uses Adapter-like for all optics and keep Identity 
functor wrappers around.  This isn't done in lens-family in order to keep 
backwards compatibility with the original Lens-like optics.

I've put out a new relase because I've started using grid optics in my 
own work.  For example, I use 'bend' to create bit-wise parsing of 256-bit 
hash values @ 
<https://github.com/ElementsProject/simplicity/blob/d1f8298b2ea557073e2358ac0b55cd70523694ad/Haskell/Simplicity/Digest.hs#L56>, 
and I use an 'fe' grid @ 
<https://github.com/ElementsProject/simplicity/blob/67c838a7b31e7fc555a027950495775b2d506d66/Haskell/Simplicity/LibSecp256k1/Spec.hs#L68-L84>, 
etc.
to create instances of Arbitrary @ 
<https://github.com/ElementsProject/simplicity/blob/67c838a7b31e7fc555a027950495775b2d506d66/Haskell/Simplicity/LibSecp256k1/FFI/Tests.hs#L82-L86>

As far as I know, Kmett's lens library doesn't yet have much support for 
grates and grids, but I'm sure that will change.

That said, a good tutorial on how to program with these new grates and 
grid optics would be useful.  Unfortunately, I think these will take time 
to be developed.

-- 
Russell O'Connor                                      <http://r6.ca/>
``My friends, love is better than anger.  Hope is better than fear.
Optimism is better than dispair.  So let us be loving, hopeful and
optimistic.  And we'll change the world.'' -- Jack Layton


More information about the Haskell-Cafe mailing list