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.