RepLib 0.2.1 → 0.2.2
raw patch · 5 files changed
+28/−24 lines, 5 filesdep ~basedep ~template-haskellnew-uploaderPVP: major bump suggested
API removals or changes: PVP suggests a major version bump
Dependency ranges changed: base, template-haskell
API changes (from Hackage documentation)
- Data.RepLib.PreludeReps: instance (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Rep e[16], Rep f[17], Rep g[18], Sat (ctx[a6Xq] a[12]), Sat (ctx[a6Xq] b[13]), Sat (ctx[a6Xq] c[14]), Sat (ctx[a6Xq] d[15]), Sat (ctx[a6Xq] e[16]), Sat (ctx[a6Xq] f[17]), Sat (ctx[a6Xq] g[18])) => Rep1 ctx[a6Xq] (a[12], b[13], c[14], d[15], e[16], f[17], g[18])
- Data.RepLib.PreludeReps: instance (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Rep e[16], Rep f[17], Sat (ctx[a6Y2] a[12]), Sat (ctx[a6Y2] b[13]), Sat (ctx[a6Y2] c[14]), Sat (ctx[a6Y2] d[15]), Sat (ctx[a6Y2] e[16]), Sat (ctx[a6Y2] f[17])) => Rep1 ctx[a6Y2] (a[12], b[13], c[14], d[15], e[16], f[17])
- Data.RepLib.PreludeReps: instance (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Rep e[16], Sat (ctx[a6Yz] a[12]), Sat (ctx[a6Yz] b[13]), Sat (ctx[a6Yz] c[14]), Sat (ctx[a6Yz] d[15]), Sat (ctx[a6Yz] e[16])) => Rep1 ctx[a6Yz] (a[12], b[13], c[14], d[15], e[16])
- Data.RepLib.PreludeReps: instance (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Sat (ctx[a6Z1] a[12]), Sat (ctx[a6Z1] b[13]), Sat (ctx[a6Z1] c[14]), Sat (ctx[a6Z1] d[15])) => Rep1 ctx[a6Z1] (a[12], b[13], c[14], d[15])
- Data.RepLib.PreludeReps: instance (Rep a[12], Rep b[13], Rep c[14], Sat (ctx[a6Zo] a[12]), Sat (ctx[a6Zo] b[13]), Sat (ctx[a6Zo] c[14])) => Rep1 ctx[a6Zo] (a[12], b[13], c[14])
- Data.RepLib.PreludeReps: instance (Rep a[a1ko]) => Rep (Maybe a[a1ko])
- Data.RepLib.PreludeReps: instance (Rep a[a1ko], Sat (ctx[a70c] a[a1ko])) => Rep1 ctx[a70c] (Maybe a[a1ko])
- Data.RepLib.PreludeReps: instance (Rep a[a6ZO], Rep b[a6ZN]) => Rep (Either a[a6ZO] b[a6ZN])
- Data.RepLib.PreludeReps: instance (Rep a[a6ZO], Rep b[a6ZN], Sat (ctx[a6ZX] a[a6ZO]), Sat (ctx[a6ZX] b[a6ZN])) => Rep1 ctx[a6ZX] (Either a[a6ZO] b[a6ZN])
- Data.RepLib.PreludeReps: instance Rep1 ctx[a6ZG] Ordering
- Data.RepLib.PreludeReps: instance Rep1 ctx[a70m] Bool
+ Data.RepLib.Derive: derive :: [Name] -> Q [Dec]
+ Data.RepLib.PreludeReps: instance (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Rep e[16], Rep f[17], Rep g[18], Sat (ctx[acEO] a[12]), Sat (ctx[acEO] b[13]), Sat (ctx[acEO] c[14]), Sat (ctx[acEO] d[15]), Sat (ctx[acEO] e[16]), Sat (ctx[acEO] f[17]), Sat (ctx[acEO] g[18])) => Rep1 ctx[acEO] (a[12], b[13], c[14], d[15], e[16], f[17], g[18])
+ Data.RepLib.PreludeReps: instance (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Rep e[16], Rep f[17], Sat (ctx[acFq] a[12]), Sat (ctx[acFq] b[13]), Sat (ctx[acFq] c[14]), Sat (ctx[acFq] d[15]), Sat (ctx[acFq] e[16]), Sat (ctx[acFq] f[17])) => Rep1 ctx[acFq] (a[12], b[13], c[14], d[15], e[16], f[17])
+ Data.RepLib.PreludeReps: instance (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Rep e[16], Sat (ctx[acFX] a[12]), Sat (ctx[acFX] b[13]), Sat (ctx[acFX] c[14]), Sat (ctx[acFX] d[15]), Sat (ctx[acFX] e[16])) => Rep1 ctx[acFX] (a[12], b[13], c[14], d[15], e[16])
+ Data.RepLib.PreludeReps: instance (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Sat (ctx[acGp] a[12]), Sat (ctx[acGp] b[13]), Sat (ctx[acGp] c[14]), Sat (ctx[acGp] d[15])) => Rep1 ctx[acGp] (a[12], b[13], c[14], d[15])
+ Data.RepLib.PreludeReps: instance (Rep a[12], Rep b[13], Rep c[14], Sat (ctx[acGM] a[12]), Sat (ctx[acGM] b[13]), Sat (ctx[acGM] c[14])) => Rep1 ctx[acGM] (a[12], b[13], c[14])
+ Data.RepLib.PreludeReps: instance (Rep a[a1Nk]) => Rep (Maybe a[a1Nk])
+ Data.RepLib.PreludeReps: instance (Rep a[a1Nk], Sat (ctx[acHA] a[a1Nk])) => Rep1 ctx[acHA] (Maybe a[a1Nk])
+ Data.RepLib.PreludeReps: instance (Rep a[acHc], Rep b[acHb]) => Rep (Either a[acHc] b[acHb])
+ Data.RepLib.PreludeReps: instance (Rep a[acHc], Rep b[acHb], Sat (ctx[acHl] a[acHc]), Sat (ctx[acHl] b[acHb])) => Rep1 ctx[acHl] (Either a[acHc] b[acHb])
+ Data.RepLib.PreludeReps: instance Rep1 ctx[acH4] Ordering
+ Data.RepLib.PreludeReps: instance Rep1 ctx[acHK] Bool
- Data.RepLib.PreludeReps: rBool1 :: R1 ctx[a70m] Bool
+ Data.RepLib.PreludeReps: rBool1 :: R1 ctx[acHK] Bool
- Data.RepLib.PreludeReps: rEither :: (Rep a[a6ZO], Rep b[a6ZN]) => R (Either a[a6ZO] b[a6ZN])
+ Data.RepLib.PreludeReps: rEither :: (Rep a[acHc], Rep b[acHb]) => R (Either a[acHc] b[acHb])
- Data.RepLib.PreludeReps: rEither1 :: (Rep a[a6ZO], Rep b[a6ZN]) => ctx[a6ZX] a[a6ZO] -> ctx[a6ZX] b[a6ZN] -> R1 ctx[a6ZX] (Either a[a6ZO] b[a6ZN])
+ Data.RepLib.PreludeReps: rEither1 :: (Rep a[acHc], Rep b[acHb]) => ctx[acHl] a[acHc] -> ctx[acHl] b[acHb] -> R1 ctx[acHl] (Either a[acHc] b[acHb])
- Data.RepLib.PreludeReps: rMaybe :: (Rep a[a1ko]) => R (Maybe a[a1ko])
+ Data.RepLib.PreludeReps: rMaybe :: (Rep a[a1Nk]) => R (Maybe a[a1Nk])
- Data.RepLib.PreludeReps: rMaybe1 :: (Rep a[a1ko]) => ctx[a70c] a[a1ko] -> R1 ctx[a70c] (Maybe a[a1ko])
+ Data.RepLib.PreludeReps: rMaybe1 :: (Rep a[a1Nk]) => ctx[acHA] a[a1Nk] -> R1 ctx[acHA] (Maybe a[a1Nk])
- Data.RepLib.PreludeReps: rOrdering1 :: R1 ctx[a6ZG] Ordering
+ Data.RepLib.PreludeReps: rOrdering1 :: R1 ctx[acH4] Ordering
- Data.RepLib.PreludeReps: rTup3_1 :: (Rep a[12], Rep b[13], Rep c[14]) => ctx[a6Zo] a[12] -> ctx[a6Zo] b[13] -> ctx[a6Zo] c[14] -> R1 ctx[a6Zo] ((,,) a[12] b[13] c[14])
+ Data.RepLib.PreludeReps: rTup3_1 :: (Rep a[12], Rep b[13], Rep c[14]) => ctx[acGM] a[12] -> ctx[acGM] b[13] -> ctx[acGM] c[14] -> R1 ctx[acGM] ((,,) a[12] b[13] c[14])
- Data.RepLib.PreludeReps: rTup4_1 :: (Rep a[12], Rep b[13], Rep c[14], Rep d[15]) => ctx[a6Z1] a[12] -> ctx[a6Z1] b[13] -> ctx[a6Z1] c[14] -> ctx[a6Z1] d[15] -> R1 ctx[a6Z1] ((,,,) a[12] b[13] c[14] d[15])
+ Data.RepLib.PreludeReps: rTup4_1 :: (Rep a[12], Rep b[13], Rep c[14], Rep d[15]) => ctx[acGp] a[12] -> ctx[acGp] b[13] -> ctx[acGp] c[14] -> ctx[acGp] d[15] -> R1 ctx[acGp] ((,,,) a[12] b[13] c[14] d[15])
- Data.RepLib.PreludeReps: rTup5_1 :: (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Rep e[16]) => ctx[a6Yz] a[12] -> ctx[a6Yz] b[13] -> ctx[a6Yz] c[14] -> ctx[a6Yz] d[15] -> ctx[a6Yz] e[16] -> R1 ctx[a6Yz] ((,,,,) a[12] b[13] c[14] d[15] e[16])
+ Data.RepLib.PreludeReps: rTup5_1 :: (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Rep e[16]) => ctx[acFX] a[12] -> ctx[acFX] b[13] -> ctx[acFX] c[14] -> ctx[acFX] d[15] -> ctx[acFX] e[16] -> R1 ctx[acFX] ((,,,,) a[12] b[13] c[14] d[15] e[16])
- Data.RepLib.PreludeReps: rTup6_1 :: (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Rep e[16], Rep f[17]) => ctx[a6Y2] a[12] -> ctx[a6Y2] b[13] -> ctx[a6Y2] c[14] -> ctx[a6Y2] d[15] -> ctx[a6Y2] e[16] -> ctx[a6Y2] f[17] -> R1 ctx[a6Y2] ((,,,,,) a[12] b[13] c[14] d[15] e[16] f[17])
+ Data.RepLib.PreludeReps: rTup6_1 :: (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Rep e[16], Rep f[17]) => ctx[acFq] a[12] -> ctx[acFq] b[13] -> ctx[acFq] c[14] -> ctx[acFq] d[15] -> ctx[acFq] e[16] -> ctx[acFq] f[17] -> R1 ctx[acFq] ((,,,,,) a[12] b[13] c[14] d[15] e[16] f[17])
- Data.RepLib.PreludeReps: rTup7_1 :: (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Rep e[16], Rep f[17], Rep g[18]) => ctx[a6Xq] a[12] -> ctx[a6Xq] b[13] -> ctx[a6Xq] c[14] -> ctx[a6Xq] d[15] -> ctx[a6Xq] e[16] -> ctx[a6Xq] f[17] -> ctx[a6Xq] g[18] -> R1 ctx[a6Xq] ((,,,,,,) a[12] b[13] c[14] d[15] e[16] f[17] g[18])
+ Data.RepLib.PreludeReps: rTup7_1 :: (Rep a[12], Rep b[13], Rep c[14], Rep d[15], Rep e[16], Rep f[17], Rep g[18]) => ctx[acEO] a[12] -> ctx[acEO] b[13] -> ctx[acEO] c[14] -> ctx[acEO] d[15] -> ctx[acEO] e[16] -> ctx[acEO] f[17] -> ctx[acEO] g[18] -> R1 ctx[acEO] ((,,,,,,) a[12] b[13] c[14] d[15] e[16] f[17] g[18])
Files
- Data/RepLib/Derive.hs +19/−13
- Data/RepLib/Lib.hs +1/−1
- Data/RepLib/SYB/Schemes.hs +0/−1
- Data/RepLib/Unify.hs +1/−2
- RepLib.cabal +7/−7
Data/RepLib/Derive.hs view
@@ -147,19 +147,21 @@ case info' of TyConI d -> do (name, param, ca, terms) <- typeInfo ((return d) :: Q Dec) + let paramNames = map tyVarBndrName param baseT <- conT name -- the type that we are defining, applied to its parameters.- let ty = foldl (\x p -> x `AppT` (VarT p)) baseT param+ let ty = foldl (\x p -> x `AppT` (VarT p)) baseT paramNames -- the representations of the paramters, as a list -- representations of the data constructors rcons <- mapM (repcon (length terms == 1) ty) terms- body <- [| Data $(repDT name param) $(return (ListE rcons)) |]- let ctx = map (\p -> (ConT (mkName "Rep")) `AppT` (VarT p)) param+ body <- [| Data $(repDT name paramNames) $(return (ListE rcons)) |]+ let ctx = map (\p -> ClassP (mkName "Rep") [VarT p]) paramNames let rTypeName :: Name rTypeName = rName n rSig :: Dec- rSig = SigD rTypeName (ForallT param ctx ((ConT (mkName "R"))- `AppT` ty))+ rSig = SigD rTypeName (ForallT (map PlainTV paramNames) + ctx ((ConT (mkName "R"))+ `AppT` ty)) rType :: Dec rType = ValD (VarP rTypeName) (NormalB body) [] let inst = InstanceD ctx ((ConT (mkName "Rep")) `AppT` ty)@@ -212,8 +214,9 @@ case info' of TyConI d -> do (name, param, ca, terms) <- typeInfo ((return d) :: Q Dec) + let paramNames = map tyVarBndrName param -- the type that we are defining, applied to its parameters. - let ty = foldl (\x p -> x `AppT` (VarT p)) (ConT name) param+ let ty = foldl (\x p -> x `AppT` (VarT p)) (ConT name) paramNames let rTypeName = rName1 n ctx <- newName "ctx"@@ -224,13 +227,13 @@ let cparams = map (\(n,t,_) -> SigP (VarP n) t) ctxParams -- the recursive call of the rep function- let e1 = foldl (\a r -> a `AppE` (VarE r)) (VarE rTypeName) param+ let e1 = foldl (\a r -> a `AppE` (VarE r)) (VarE rTypeName) paramNames let e2 = foldl (\a (n,_,_) -> a `AppE` (VarE n)) e1 ctxParams -- the representations of the parameters, as a list -- representations of the data constructors rcons <- mapM (repcon1 ty (length terms == 1) e2 ctxParams) terms- body <- [| Data1 $(repDT name param) + body <- [| Data1 $(repDT name paramNames) $(return (ListE rcons)) |] let rhs = LamE (cparams) body@@ -239,18 +242,18 @@ rTypeDecl = ValD (VarP rTypeName) (NormalB rhs) [] - let ctxRep = map (\p -> (ConT (mkName "Rep")) `AppT` (VarT p)) param- ctxRec = map (\(_,t,_) -> (ConT ''Sat) `AppT` t) ctxParams+ let ctxRep = map (\p -> ClassP (mkName "Rep") [VarT p]) paramNames+ ctxRec = map (\(_,t,_) -> ClassP ''Sat [t]) ctxParams -- appRep t = foldl (\a p -> a `AppE` (VarE 'rep)) t param appRec t = foldl (\a p -> a `AppE` (VarE 'dict)) t ctxParams let inst = InstanceD (ctxRep ++ ctxRec) ((ConT ''Rep1) `AppT` (VarT ctx) `AppT` ty)- [ValD (VarP (mkName "rep1"))+ [ValD (VarP (mkName "rep1")) (NormalB (appRec (VarE rTypeName))) []] - let rSig = SigD rTypeName (ForallT (ctx : param) ctxRep+ let rSig = SigD rTypeName (ForallT (map PlainTV (ctx : paramNames)) ctxRep (foldr (\(_,p,_) f -> (ArrowT `AppT` p `AppT` f)) ((ConT (mkName "R1")) `AppT` (VarT ctx) `AppT` ty) ctxParams))@@ -277,7 +280,7 @@ --- from SYB III code.... -typeInfo :: DecQ -> Q (Name, [Name], [(Name, Int)], [(Name, [(Maybe Name, Type)])])+typeInfo :: DecQ -> Q (Name, [TyVarBndr], [(Name, Int)], [(Name, [(Maybe Name, Type)])]) typeInfo m = do d <- m case d of@@ -318,3 +321,6 @@ _:t -> mkName t +tyVarBndrName :: TyVarBndr -> Name+tyVarBndrName (PlainTV n) = n+tyVarBndrName (KindedTV n _) = n
Data/RepLib/Lib.hs view
@@ -42,7 +42,7 @@ import Data.RepLib.R import Data.RepLib.R1 import Data.RepLib.RepAux-import Data.RepLib.PreludeReps+import Data.RepLib.PreludeReps() ------------------- Subtrees -------------------------- -- there is no point in using R1 for subtrees
Data/RepLib/SYB/Schemes.hs view
@@ -44,7 +44,6 @@ import Data.RepLib.R import Data.RepLib.RepAux import Data.RepLib.SYB.Aliases-import Control.Monad -- | Apply a transformation everywhere in bottom-up manner
Data/RepLib/Unify.hs view
@@ -24,8 +24,7 @@ import Data.RepLib.R import Data.RepLib.R1 import Data.RepLib.RepAux-import Data.RepLib.PreludeReps-import Control.Monad+import Data.RepLib.PreludeReps() import Control.Monad.State import Control.Monad.Error
RepLib.cabal view
@@ -1,12 +1,13 @@ name: RepLib-version: 0.2.1+version: 0.2.2 license: LGPL license-file: LICENSE build-type: Simple cabal-version: >= 1.2.3-tested-with: GHC == 6.10.3, GHC == 6.8.3+tested-with: GHC == 6.12.1 author: Stephanie Weirich-maintainer: Brent Yorgey <byorgey@cis.upenn.edu>+maintainer: Chris Casinghino <ccasin@cis.upenn.edu>+ Brent Yorgey <byorgey@cis.upenn.edu> Stephanie Weirich <sweirich@cis.upenn.edu> homepage: http://www.cis.upenn.edu/~sweirich/RepLib category: Data@@ -16,8 +17,8 @@ polymorphism and other features. Library- build-depends: base >= 3.0 && < 4.2, haskell98 >= 1.0 && < 1.1, - template-haskell >= 2.2 && < 2.4, mtl >= 1.1 && < 1.2+ build-depends: base >= 4.2 && < 5, haskell98 >= 1.0 && < 1.1, + template-haskell >= 2.4 && < 2.5, mtl >= 1.1 && < 1.2 exposed-modules: Data.RepLib, Data.RepLib.R,@@ -30,5 +31,4 @@ Data.RepLib.SYB.Aliases, Data.RepLib.SYB.Schemes, Data.RepLib.Unify- if impl(ghc < 6.10)- extensions: PatternSignatures+ extensions: GADTs