module Control.Lens.Named ( -- * Lens rules lensAppend , lensModify -- * Splices , makeLensesModified , makeLensesAppend ) where import Control.Lens import Data.Semigroup (Semigroup (..)) import Language.Haskell.TH.Syntax -- | Generate simple lenses. lensModify :: (String -> String) -> LensRules lensModify f = lensRules & lensField .~ mappingNamer (pure . f) -- | Create lenses by changing @fieldName@ to @fieldNameLens@. lensAppend :: LensRules lensAppend = lensModify (<> "Lens") makeLensesModified :: (String -> String) -> Name -> Q [Dec] makeLensesModified = makeLensesWith . lensModify -- | Works like 'makeLenses' makeLensesAppend :: Name -> Q [Dec] makeLensesAppend = makeLensesWith lensAppend