packages feed

catamorphism 0.6.1.0 → 0.6.1.1

raw patch · 2 files changed

+46/−7 lines, 2 filesPVP ok

version bump matches the API change (PVP)

API changes (from Hackage documentation)

Files

catamorphism.cabal view
@@ -1,7 +1,48 @@ name:                catamorphism-version:             0.6.1.0-synopsis:            A package exposing a helper function for generating catamorphisms.-description:         A package exposing a helper function for generating catamorphisms.+version:             0.6.1.1+synopsis:            Exposes a Template Haskell function for generating catamorphisms.+description:+  This module exposes a 'makeCata' function which can create catamorphisms for+  arbitrary Haskell types. Catamorphisms are functions which deconstruct some+  value by replacing each data constructor with a custom function yielding a+  new value. See <http://www.haskell.org/haskellwiki/Catamorphisms> for a more+  in-depth discussion of catamorphisms in Haskell.+  .+  The Haskell base package already comes with a couple of standard+  catamorphisms, such as 'maybe' (for 'Maybe' values). The 'maybe' function+  could have been generated using 'makeCata' as follows:+  .+  > -- Defines 'maybe :: b -> (a -> b) -> Maybe a -> b'+  > $(makeCata defaultOptions ''Maybe)+  .+  However, catamorphisms are especially useful for recursive data structures.+  Consider the following simple example which defines a basic data type for+  modelling sums of numbers, supporting variables:+  .+  > import Data.Morphism.Cata+  > import Data.Maybe (fromJust)+  >+  > data Expr a = Number a+  >             | Variable Char+  >             | Sum (Expr a) (Expr a)+  >+  > -- Defines 'expr :: (a -> b) -> (Char -> b) -> (b -> b -> b) -> Expr a -> b'+  > $(makeCata defaultOptions ''Expr)+  .+  The 'makeCata' invocation defines a 'expr' function which works like a fold on+  'Expr' values; it can be used to implement various useful other functions:+  .+  > -- Evaluate an Expr, given some variable bindings+  > eval :: Num a => [(Char, a)] -> Expr a -> a+  > eval vars = expr id (fromJust . (`lookup` vars)) (+)+  >+  > -- Pretty-prints an Expr+  > pprint :: Show a => Expr a -> String+  > pprint = expr show show (\a b -> a ++ " + " ++ b)+  >+  > -- Counts the number of variables used in an expr+  > numVars :: Expr a -> Int+  > numVars = expr (const 1) (const 0) (+) homepage:            https://github.com/frerich/catamorphism license:             BSD3 license-file:        LICENSE
src/Data/Morphism/Cata.hs view
@@ -177,7 +177,7 @@         return (SigD funName (ForallT (PlainTV resultTypeName : tyVarBndrs) [] (foldr1 makeFuncT args)))      funDef :: [Con] -> Q Dec-    funDef cons = (FunD funName . (:[])) <$> funImpl cons+    funDef cons = FunD funName . (:[]) <$> funImpl cons      funName :: Name     funName = mkName $@@ -209,9 +209,7 @@        where         conToConP :: Con -> Q Pat-        conToConP c = do-            argNames <- replicateM (length . conArgTypes $ c) (VarP <$> newName "a")-            return (ConP (conName c) argNames)+        conToConP c = ConP (conName c) <$> replicateM (length . conArgTypes $ c) (VarP <$> newName "a")  tyVarName :: TyVarBndr -> Name tyVarName (PlainTV n)    = n