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 +11/−6
- algebraic-classes.cabal +1/−1
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@.