Hello, does OverloadedRecordDot (GHC extension since 9.2) replace lenses concepts or are they meant to be use together ?
              
              
              1 Like
            
            
          At work we use them together (with the optics library):
- Dot accessors for “simple” access (record.subrecord.field)
 - Optics for more complex access (
previewespecially). One usecase is the implementation of a PATCH endpoint where the values of the resource in database are substituted by the fields present in the payload, and left alone if the payload value is set toNothing. - Optics for record updates
 
              
              
              1 Like
            
            
          I have also recently started using OverloadedRecordDot at work, where we also use lens. My experience has been quite similar to the above:
- Dot accessors are extremely comfortable and work well with 
(<&>)— but sensitive to autoformatting breaking code if pasted into a module without{-# LANGUAGE OverloadedRecordDot #-} - Record updates are easier with 
lensfunctions, especially(?~)and(%~). We have helper functions for preadjusting settings with an argument[settings -> settings]; we fill this list with things likefields <>~ [x, y, z]andname ?~ value. 
We haven’t yet run into naming issues between field accessors and lenses, though it would be nice to be able to use the same name in both places: datatype.field and datatype ^. field.
              
              
              1 Like