data-accessor-template 0.2.1 → 0.2.1.1
raw patch · 2 files changed
+18/−17 lines, 2 filesdep ~template-haskellPVP ok
version bump matches the API change (PVP)
Dependency ranges changed: template-haskell
API changes (from Hackage documentation)
Files
data-accessor-template.cabal view
@@ -1,5 +1,5 @@ Name: data-accessor-template-Version: 0.2.1+Version: 0.2.1.1 License: BSD3 License-File: LICENSE Author: Luke Palmer <lrpalmer@gmail.com>, Henning Thielemann <haskell@henning-thielemann.de>
src/Data/Accessor/Template.hs view
@@ -56,7 +56,7 @@ stripUnderscore :: String -> Maybe String stripUnderscore s = do (stem,'_') <- viewR s- return $ stem+ return stem -- |@nameDeriveAccessors n f@ where @n@ is the name of a data type@@ -70,11 +70,11 @@ reified <- case info of TyConI dec -> return dec _ -> fail errmsg- cons <- case reified of- DataD _ _ _ cons' _ -> return cons'- NewtypeD _ _ _ con' _ -> return [con']+ (params, cons) <- case reified of+ DataD _ _ params cons' _ -> return (params, cons')+ NewtypeD _ _ params con' _ -> return (params, [con']) _ -> fail errmsg- decs <- liftM concat $ mapM makeAccs cons+ decs <- liftM concat $ mapM (makeAccs params) cons when (null decs) $ qReport False nodefmsg return decs @@ -90,28 +90,29 @@ ++ "\n nameDeriveAccessors, remember accessors are" ++ "\n only generated for fields ending with an underscore" - makeAccs :: Con -> Q [Dec]- makeAccs (RecC _ vars) =- liftM (concat . catMaybes) $ mapM (\ (name,_,ftype) -> makeAccFromName name ftype) vars- makeAccs (ForallC _ _ c) = makeAccs c- makeAccs _ = return []+ makeAccs :: [Name] -> Con -> Q [Dec]+ makeAccs params (RecC _ vars) =+ liftM (concat . catMaybes) $ mapM (\ (name,_,ftype) -> makeAccFromName name params ftype) vars+ makeAccs params (ForallC _ _ c) = makeAccs params c+ makeAccs _ _ = return [] transformName :: Name -> Maybe Name transformName (Name occ f) = do n <- namer (occString occ) return $ Name (mkOccName n) f - makeAccFromName :: Name -> Type -> Q (Maybe [Dec])- makeAccFromName name ftype = do+ makeAccFromName :: Name -> [Name] -> Type -> Q (Maybe [Dec])+ makeAccFromName name params ftype = case transformName name of Nothing -> return Nothing- Just n -> liftM Just $ makeAcc name ftype n+ Just n -> liftM Just $ makeAcc name params ftype n -- haddock doesn't grok TH #ifndef __HADDOCK__ - makeAcc :: Name -> Type -> Name -> Q [Dec]- makeAcc name ftype accName = do+ makeAcc ::Name -> [Name] -> Type -> Name -> Q [Dec]+ makeAcc name params ftype accName = do+ let appliedT = foldl AppT (ConT t) (map VarT params) body <- [| Accessor.fromSetGet ( \x s ->@@ -119,7 +120,7 @@ ( $( return $ VarE name ) ) |] return- [ SigD accName (AppT (AppT (ConT ''Accessor.T) (ConT t)) ftype)+ [ SigD accName (ForallT params [] (AppT (AppT (ConT ''Accessor.T) appliedT) ftype)) , ValD (VarP accName) (NormalB body) [] ]