packages feed

zuramaru-0.1.0.0: src/Maru/TH.hs

-- |
-- Avoid 'GHC stage restriction' of TemplateHaskell.
-- Define 'DecsQ' functions.
module Maru.TH
  ( makeLensesA
  ) where

import Control.Lens ((&), (.~), DefName(..), makeLensesWith, lensRules, lensField)
import Language.Haskell.TH (Name, mkName, nameBase, DecsQ)

-- |
-- makeLenses with 'A' suffix.
-- e.g. replEnv -> replEnvA
makeLensesA :: Name -> DecsQ
makeLensesA = makeLensesWith (lensRules & lensField .~ addSuffix)
  where
    addSuffix :: Name -> [Name] -> Name -> [DefName]
    addSuffix _ _ recordName = [TopName . mkName $ nameBase recordName ++ "A"]