Skip to content

Instantly share code, notes, and snippets.

@paolino
Created August 20, 2020 11:51
Show Gist options
  • Save paolino/4a457e52dd7c4d171a69a5c91ae484e5 to your computer and use it in GitHub Desktop.
Save paolino/4a457e52dd7c4d171a69a5c91ae484e5 to your computer and use it in GitHub Desktop.
{-
dependencies:
- lens
- template-haskell
create all lenses for a record type preponing an l_
-}
import Control.Lens ((.~), lensRules, lensField, makeLensesWith, DefName(TopName), FieldNamer)
import Language.Haskell.TH (DecsQ, Name, nameBase, mkName)
allLNamer :: FieldNamer
allLNamer _ _ n = pure $ TopName $ mkName ('l': '_' : nameBase n)
makeLLenses :: Name -> DecsQ
makeLLenses = makeLensesWith (lensField .~ allLNamer $ lensRules )
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment