packages feed

lens-family-th 0.1.0.0 → 0.2.0.0

raw patch · 4 files changed

+91/−30 lines, 4 filesdep ~template-haskellPVP ok

version bump matches the API change (PVP)

Dependency ranges changed: template-haskell

API changes (from Hackage documentation)

+ Lens.Family.TH: mkLensesFor :: [(String, String)] -> Name -> Q [Dec]
+ Lens.Family2.TH: mkLensesFor :: [(String, String)] -> Name -> Q [Dec]
- Lens.Family.TH: mkLensesBy :: (String -> String) -> Name -> Q [Dec]
+ Lens.Family.TH: mkLensesBy :: (String -> Maybe String) -> Name -> Q [Dec]
- Lens.Family.THCore: defaultNameTransform :: String -> String
+ Lens.Family.THCore: defaultNameTransform :: String -> Maybe String
- Lens.Family.THCore: deriveLenses :: (Name -> LensTypeInfo -> ConstructorFieldInfo -> Q [Dec]) -> (String -> String) -> Name -> Q [Dec]
+ Lens.Family.THCore: deriveLenses :: (Name -> LensTypeInfo -> ConstructorFieldInfo -> Q [Dec]) -> (String -> Maybe String) -> Name -> Q [Dec]
- Lens.Family2.TH: mkLensesBy :: (String -> String) -> Name -> Q [Dec]
+ Lens.Family2.TH: mkLensesBy :: (String -> Maybe String) -> Name -> Q [Dec]

Files

Lens/Family/TH.hs view
@@ -5,16 +5,20 @@ -- Example usage: --  -- --- > {-# LANGUAGE TemplateHaskell -#}+-- > {-# LANGUAGE TemplateHaskell #-} -- >  -- > import Lens.Family -- > import Lens.Family.TH -- >  -- > data Foo a = Foo { _bar :: Int, _baz :: a }--- >            deriving (Show, Read, Eq, ord)+-- >            deriving (Show, Read, Eq, Ord) -- > $(mkLenses ''Foo) -- -module Lens.Family.TH (mkLenses, mkLensesBy) where+module Lens.Family.TH (+    mkLenses+  , mkLensesBy+  , mkLensesFor+  ) where  import Language.Haskell.TH import Lens.Family.THCore@@ -23,12 +27,35 @@ -- | 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:+-- +-- $(mkLenses ''Foo) mkLenses :: Name -> Q [Dec] mkLenses = mkLensesBy defaultNameTransform --- | Derive lenses with the provided name transformation function.-mkLensesBy :: (String -> String) -> Name -> Q [Dec]++-- | 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:+-- +-- > $(mkLensesBy (\n -> Just (n ++ "L")) ''Foo)+mkLensesBy :: (String -> Maybe String) -> Name -> Q [Dec] mkLensesBy = deriveLenses deriveLensSig+++-- | Derive lenses, specifying explicit pairings of @(fieldName, lensName)@.+-- +-- Example usage:+-- +-- > $(mkLensesFor [("_foo", "fooLens"), ("bar", "lbar")] ''Foo)+mkLensesFor :: [(String, String)] -> Name -> Q [Dec]+mkLensesFor fields = mkLensesBy (`lookup` fields)   -- TODO
Lens/Family/THCore.hs view
@@ -13,11 +13,12 @@  -- | By default, if the field name begins with an underscore, -- then the underscore will simply be removed (and the new first character--- lowercased if necessary). Otherwise, the suffix "Lens" will be added.-defaultNameTransform :: String -> String-defaultNameTransform ('_':c:rest) = toLower c : rest-defaultNameTransform n = n ++ "Lens"+-- lowercased if necessary).+defaultNameTransform :: String -> Maybe String+defaultNameTransform ('_':c:rest) = Just $ toLower c : rest+defaultNameTransform _ = Nothing + -- | Information about the larger type the lens will operate on. type LensTypeInfo = (Name, [TyVarBndr]) @@ -27,11 +28,12 @@  -- | The true workhorse of lens derivation. This macro is parameterized -- by a macro that derives signatures, as well as a function that--- transforms names.+-- filters and transforms names. Producing Nothing means that+-- a lens should not be generated for the provided name. deriveLenses ::      (Name -> LensTypeInfo -> ConstructorFieldInfo -> Q [Dec])      -- ^ the signature deriver-  -> (String -> String)+  -> (String -> Maybe String)      -- ^ the name transformer   -> Name -> Q [Dec] deriveLenses sigDeriver nameTransform datatype = do@@ -75,15 +77,18 @@ -- Derive a lens for the given record selector -- using the given name transformation function. deriveLens :: (Name -> LensTypeInfo -> ConstructorFieldInfo -> Q [Dec])-           -> (String -> String)+           -> (String -> Maybe String)            -> LensTypeInfo -> ConstructorFieldInfo -> Q [Dec] deriveLens sigDeriver nameTransform ty field = do   let (fieldName, _fieldStrict, _fieldType) = field       (_tyName, _tyVars) = ty  -- just to clarify what's here-      lensName = mkName $ nameTransform $ nameBase fieldName-  sig <- sigDeriver lensName ty field-  body <- deriveLensBody lensName fieldName-  return $ sig ++ [body]+  case nameTransform (nameBase fieldName) of+    Nothing       -> return []+    Just lensNameStr -> do+      let lensName = mkName lensNameStr+      sig  <- sigDeriver lensName ty field+      body <- deriveLensBody lensName fieldName+      return $ sig ++ [body]   -- Given a record field name,
Lens/Family2/TH.hs view
@@ -5,16 +5,20 @@ -- Example usage: --  -- --- > {-# LANGUAGE TemplateHaskell, Rank2Types -#}+-- > {-# LANGUAGE TemplateHaskell, Rank2Types #-} -- >  -- > import Lens.Family2 -- > import Lens.Family2.TH -- >  -- > data Foo a = Foo { _bar :: Int, _baz :: a }--- >            deriving (Show, Read, Eq, ord)+-- >            deriving (Show, Read, Eq, Ord) -- > $(mkLenses ''Foo) -- -module Lens.Family2.TH (mkLenses, mkLensesBy) where+module Lens.Family2.TH (+    mkLenses+  , mkLensesBy+  , mkLensesFor+  ) where  import Language.Haskell.TH import Lens.Family.THCore@@ -23,12 +27,35 @@ -- | 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:+-- +-- $(mkLenses ''Foo) mkLenses :: Name -> Q [Dec] mkLenses = mkLensesBy defaultNameTransform --- | Derive lenses with the provided name transformation function.-mkLensesBy :: (String -> String) -> Name -> Q [Dec]++-- | 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:+-- +-- > $(mkLensesBy (\n -> Just (n ++ "L")) ''Foo)+mkLensesBy :: (String -> Maybe String) -> Name -> Q [Dec] mkLensesBy = deriveLenses deriveLensSig+++-- | Derive lenses, specifying explicit pairings of @(fieldName, lensName)@.+-- +-- Example usage:+-- +-- > $(mkLensesFor [("_foo", "fooLens"), ("bar", "lbar")] ''Foo)+mkLensesFor :: [(String, String)] -> Name -> Q [Dec]+mkLensesFor fields = mkLensesBy (`lookup` fields)   -- TODO
lens-family-th.cabal view
@@ -1,33 +1,35 @@ name:                lens-family-th-version:             0.1.0.0-synopsis:            Template Haskell to generate lenses for-                     lens-family and lens-family-core+version:             0.2.0.0+synopsis:            Generate lens-family style lenses  description:   Due to a cabal/hackage defect, curly braces cannot be   adequately displayed here. Please see   <http://github.com/DanBurton/lens-family-th#readme>-  for a proper description.+  for a proper description of this package.   .   (See <https://github.com/haskell/cabal/issues/968>   for the ticket I created regarding the defect.) --homepage:            http://github.com/DanBurton/lens-family-th license:             BSD3 license-file:        LICENSE author:              Dan Burton-maintainer:          danburton.email@gmail.com copyright:           (c) Dan Burton 2012 +homepage:            http://github.com/DanBurton/lens-family-th#readme+bug-reports:         http://github.com/DanBurton/lens-family-th/issues+maintainer:          danburton.email@gmail.com++ category:            Data build-type:          Simple cabal-version:       >=1.8  library   exposed-modules:     Lens.Family.TH, Lens.Family2.TH, Lens.Family.THCore-  build-depends:       base ==4.*, template-haskell ==2.7.*+  build-depends:       base ==4.*, template-haskell >= 2.5 && < 2.8 + source-repository head   type:      git   location:  git://github.com/DanBurton/lens-family-th.git@@ -35,4 +37,4 @@ source-repository this   type:      git   location:  git://github.com/DanBurton/lens-family-th.git-  tag:       lens-family-th-0.1.0.0+  tag:       lens-family-th-0.2.0.0