[Haskell-cafe] Lenses and records and ecosystem

Anthony Clayden anthony_clayden at clear.net.nz
Sat Feb 11 00:53:59 UTC 2017


> ON 10/02/17 07:10, Tony Morris wrote:

>> On 10/02/17 15:35, Anthony Clayden wrote:
>> I see Simon PJ's comment here
>>
https://github.com/ghc-proposals/ghc-proposals/pull/6#issuecomment-277971802
>> and the lengthy discussions from different advocates.
>>
>> How much is it true there's a fractured "Haskell
ecosystem" 
>> with 2 (3?) incompatible approaches:
>> * H98 style labelled records with various extensions
>>    to ease the pain.
>> * newtype-wrapped Lenses
>> * 'raw' (unwrapped) Lenses

> Yearss ago, many of us spent a long time 
> on different designs of lenses, ...
> ... it would be foolish to concede that ground 
> for no significant benefit.

Thanks Tony, but I don't understand: concede what ground?
You're perhaps saying that one style of lenses is the
'right' one(?)
I am asking if they can co-exist.

>
> Can you mix those three styles inside one program?
> How much pain does it cause?
>
> Can you import libraries with a mix of styles? How does a
> program cope?

Why would you? For what practical purpose?

A lens/a structure/a record is a means to an end.
Applications that are putting/getting stuff
are doing it for some purpose.
Not merely because lenses are a nice application of category
theory.

So say you want to use the functionality from 3 different
libraries, but each is written using a different style.

>>
>> I see the plethora of operators Lenses come with
>>  (mostly to keep the types coherent?). 
>> Except that Lens composition is plain function
composition
>> (.).
>>
>> I remember something from SPJ's video/lecture on Lenses: 
>> that having Lens composition turn out to be function
>> composition is "cute". 

> The use of (.) here was deliberately designed that way to
> assist in working against existing code.

Is "against" some clever pun here?
Like Concerto for Piano against Orchestra?

Certainly (.) for lenses works 'backwards'
(i.e. suffix style)
compared to function-prefix style.
(As any Lens tutorial will say.)

>> That suggests to me it's more of a happy accident than a
>> necessary feature.

> Not necessary, just useful. I am less excited about this
> feature than many others, but it is useful nonetheless, 
> and was specifically designed that way.

Whether or not that's justified [**]
it's counter-intuitive w.r.t. Haskell,
so I don't see a need to use the same symbol.
Hence my "wondering" below.

>>
>> I also see in the ORF proposal, OverloadedLabels part, 
>> that composing with Control.Category.(.) can lead to type
>> ambiguity.
>>
>> I wonder:
>> Could there be a dedicated operator for composing Lenses,
>> that has the same semantics as (.),
>> but a more specialised type?
>> To strengthen type inference/reduce ambiguity.
>>

[**] the justification for postfix style
seems to be so it's more like OO.
Seems strange: FP just isn't very like OO.
And in particular, functional data structures,
just aren't like OO/procedural data structures.


Anthony


More information about the Haskell-Cafe mailing list