{-# LANGUAGE TemplateHaskell #-}
module SAML2.Lens
  ( fieldLens
  ) where

import Control.Lens.Lens (lens)
import qualified Language.Haskell.TH as TH

fieldLens :: TH.Name -> TH.ExpQ
fieldLens f = do
  a <- TH.newName "a"
  b <- TH.newName "b"
  return $ TH.VarE 'lens `TH.AppE` TH.VarE f
    `TH.AppE` TH.LamE [TH.VarP a, TH.VarP b] (TH.RecUpdE (TH.VarE a) [(f, TH.VarE b)])