{-# LANGUAGE TemplateHaskell, Rank2Types #-} -- | Derive lenses for "Lens.Family2". -- -- Example usage: -- -- -- > {-# LANGUAGE TemplateHaskell, Rank2Types #-} -- > -- > import Lens.Family2 -- > import Lens.Family2.TH -- > -- > data Foo a = Foo { _bar :: Int, _baz :: a } -- > deriving (Show, Read, Eq, Ord) -- > $(makeLenses ''Foo) -- module Lens.Family2.TH ( makeLenses , makeLensesBy , makeLensesFor , makeTraversals , mkLenses , mkLensesBy , mkLensesFor ) where import Language.Haskell.TH import Lens.Family.THCore -- | Derive lenses for the record selectors in -- a single-constructor data declaration, -- or for the record selector in a newtype declaration. -- Lenses will only be generated for record fields which -- are prefixed with an underscore. -- -- Example usage: -- -- > $(makeLenses ''Foo) makeLenses :: Name -> Q [Dec] makeLenses = makeLensesBy defaultNameTransform {-# DEPRECATED mkLenses "Use makeLenses instead." #-} mkLenses :: Name -> Q [Dec] mkLenses = makeLenses -- | Derive lenses with the provided name transformation -- and filtering function. Produce @Just lensName@ to generate a lens -- of the resultant name, or @Nothing@ to not generate a lens -- for the input record name. -- -- Example usage: -- -- > $(makeLensesBy (\n -> Just (n ++ "L")) ''Foo) makeLensesBy :: (String -> Maybe String) -> Name -> Q [Dec] makeLensesBy = deriveLenses deriveLensSig {-# DEPRECATED mkLensesBy "Use makeLensesBy instead." #-} mkLensesBy :: (String -> Maybe String) -> Name -> Q [Dec] mkLensesBy = makeLensesBy -- | Derive lenses, specifying explicit pairings of @(fieldName, lensName)@. -- -- Example usage: -- -- > $(makeLensesFor [("_foo", "fooLens"), ("bar", "lbar")] ''Foo) makeLensesFor :: [(String, String)] -> Name -> Q [Dec] makeLensesFor fields = makeLensesBy (`lookup` fields) {-# DEPRECATED mkLensesFor "Use makeLensesFor instead." #-} mkLensesFor :: [(String, String)] -> Name -> Q [Dec] mkLensesFor = makeLensesFor -- TODO deriveLensSig :: Name -> LensTypeInfo -> ConstructorFieldInfo -> Q [Dec] deriveLensSig _ _ _ = return []