packages feed

algebraic-classes 0.4 → 0.5

raw patch · 4 files changed

+14/−6 lines, 4 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

Data/Algebra.hs view
@@ -23,6 +23,7 @@     -- * Classes   , Algebra(..)   , algebraA+  , Signature(..)   , AlgebraSignature(..)   ) where 
Data/Algebra/Internal.hs view
@@ -25,6 +25,9 @@ import Data.Monoid import Control.Arrow ((&&&)) +-- | The signature datatype for the class @c@.+type family Signature (c :: * -> Constraint) :: * -> *+ class Traversable f => AlgebraSignature f where   -- | The class for which @f@ is the signature.   type Class f :: * -> Constraint
Data/Algebra/TH.hs view
@@ -29,6 +29,7 @@ import Data.Foldable (Foldable(foldMap)) import Data.Traversable (Traversable, forM) import Data.Monoid (Endo(..))+import Data.Maybe (catMaybes)  import Language.Haskell.TH import Data.Generics (Data, everywhere, mkT)@@ -55,10 +56,12 @@   let sigName = changeName (++ "Signature") name   ops <- forM decs $ \(SigD nm (ForallT [PlainTV tv'] _ tp)) -> do     ClassOpI _ _ _ fty <- reify nm-    Just (ar, mkCon) <- return $ buildOperation tv' tp-    let opName = changeName ("Op_" ++) nm-    return $ OperationTH nm opName ar (everywhere (mkT (rename tv' tv)) (mkCon opName)) fty-  return $ SignatureTH sigName tv ops+    return $ case buildOperation tv' tp of+      Just (ar, mkCon) -> +        let opName = changeName ("Op_" ++) nm+        in Just $ OperationTH nm opName ar (everywhere (mkT (rename tv' tv)) (mkCon opName)) fty+      _ -> Nothing+  return $ SignatureTH sigName tv $ catMaybes ops  -- | Derive a signature for an algebraic class. --   For example:@@ -146,9 +149,10 @@     [''Functor, ''Foldable, ''Traversable, ''Eq, ''Ord]]  signatureInstances :: Name -> SignatureTH -> [Dec]-signatureInstances nm s = [asInst, showInst]+signatureInstances nm s = [asInst, showInst, sigTFInst]   where     signature = ConT (signatureName s)+    sigTFInst = TySynInstD ''Signature [ConT nm] signature     typeInst = TySynInstD ''Class [signature] (ConT nm)     asClauses =        [ Clause [ConP opName (map VarP args)] (NormalB (foldl (\e arg -> AppE e (VarE arg)) (VarE fName) args)) []
algebraic-classes.cabal view
@@ -1,5 +1,5 @@ name:                algebraic-classes-version:             0.4+version:             0.5 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@.