[Haskell-cafe] updating multiple fields of a record with lenses

Charlie Paul charlieap at gmail.com
Mon Nov 4 23:09:42 UTC 2013


I had a similar question a while back, and I've been wondering why there
isn't a nicer way to combine fine grained lenses. It could be used to
create law-breaking lenses, but it instead gets implemented manually each
time. Perhaps some sort of typeclass or GADT arrangement could be used to
define a 'basis' of an object consiting of lenses which are independent, so
setting twice works fine. Actually, I think an Iso' with a tuple would be
sufficient to define this.

On Mon, Nov 4, 2013 at 3:04 PM, Dan Burton <danburton.email at gmail.com>wrote:

> There's not really a "smarter" way to do it, but there is a "prettier" way:
>
> foo
>   & a .~ "String"
>   & b .~ [1,2,3]
>   & c .~ 'c'
>   & d .~ 4
>
>
> -- Dan Burton
>
>
> On Mon, Nov 4, 2013 at 2:51 PM, felipe zapata <tifonzafel at gmail.com>wrote:
>
>>  Dear Haskellers,
>>
>>  let's  suppose I have the following lenses
>>
>>  data Foo = Foo { _a :: String
>>                   _b :: [Double]
>>                   _c :: Vector Double
>>                   _d :: Int
>>                   .............. (more fields)
>>                   _z :: Double
>>                 }
>>
>> Now, I want to update fields a,b,c and d without changing the rest.
>> What is the functional way of doing it ?
>>
>> Surely there a function smarter than
>>
>>  set a "String" . set b [1,2,3] . set c  <1,2,3> . set d 4 $ foo
>>
>>  can some please help me with it?
>>
>>  Thanks in advance,
>>
>>    Felipe Z.
>>
>> _______________________________________________
>> Haskell-Cafe mailing list
>> Haskell-Cafe at haskell.org
>> http://www.haskell.org/mailman/listinfo/haskell-cafe
>>
>>
>
> _______________________________________________
> Haskell-Cafe mailing list
> Haskell-Cafe at haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://www.haskell.org/pipermail/haskell-cafe/attachments/20131104/356984f4/attachment.html>


More information about the Haskell-Cafe mailing list