packages feed

algebraic-classes 0.3 → 0.3.1

raw patch · 2 files changed

+12/−7 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

Data/Algebra/TH.hs view
@@ -25,8 +25,9 @@  import Control.Applicative import Control.Arrow ((***))-import Data.Foldable (Foldable)+import Data.Foldable (Foldable(foldMap)) import Data.Traversable (Traversable)+import Data.Monoid (Endo(..))  import Language.Haskell.TH import Data.Generics@@ -115,12 +116,13 @@   s <- getSignatureInfo className   let      givenLU = -      [ (nameBase nm, \nm' -> FunD nm' cs) | FunD nm cs <- given ] ++ -      [ (nameBase nm, \nm' -> ValD (VarP nm') b ds) | ValD (VarP nm) b ds <- given]+      [ (nameBase nm, (nm, renamer f)) | f@(FunD nm _) <- given ] ++ +      [ (nameBase nm, (nm, renamer v)) | v@(ValD (VarP nm) _ _) <- given ]+    renamer = renameAll [ (nm, nm') | (b, (nm, _)) <- givenLU, OperationTH nm' _ _ _ <- operations s, nameBase nm' == b ]     impl =        [ maybe            (FunD fName [Clause (map VarP args) (NormalB (AppE (VarE 'algebra) (foldl (\e arg -> AppE e (VarE arg)) (ConE opName) args))) []]) -          ($ fName) mgiven+          snd mgiven       | OperationTH fName opName ar _ <- operations s, let mgiven = lookup (nameBase fName) givenLU, let args = mkArgList ar ]      (++ [InstanceD ctx (AppT (ConT className) typeName) impl]) <$> deriveSignature className @@ -149,8 +151,11 @@ mkArgList :: Int -> [Name] mkArgList n = [ mkName $ "a" ++ show i | i <- [1 .. n] ] -rename :: Name -> Name -> Type -> Type-rename a b (VarT c) | a == c = VarT b+renameAll :: Data a => [(Name, Name)] -> a -> a+renameAll m = everywhere (mkT (appEndo (foldMap (\(a, b) -> Endo $ rename a b) m)))++rename :: Name -> Name -> Name -> Name+rename a b c | a == c = b rename _ _ t = t  prependC :: (Strict, Type) -> Con -> Con
algebraic-classes.cabal view
@@ -1,5 +1,5 @@ name:                algebraic-classes-version:             0.3+version:             0.3.1 synopsis:            Conversions between algebraic classes and F-algebras. description:         Algebraic classes are type classes where all the methods return a value of the same type, which is also the class parameter.                      Examples from @base@ are @Num@ and @Monoid@.