-- | Type classes for some common properties shared by different objects {-# LANGUAGE MultiParamTypeClasses, FunctionalDependencies #-} module Math.Combinat.Classes where -------------------------------------------------------------------------------- -- | Emptyness class CanBeEmpty a where isEmpty :: a -> Bool empty :: a -------------------------------------------------------------------------------- -- * Partitions -- | Number of parts class HasNumberOfParts a where numberOfParts :: a -> Int -------------------------------------------------------------------------------- class HasWidth a where width :: a -> Int class HasHeight a where height :: a -> Int -------------------------------------------------------------------------------- -- | Weight (of partitions, tableaux, etc) class HasWeight a where weight :: a -> Int -------------------------------------------------------------------------------- -- | Duality (of partitions, tableaux, etc) class HasDuality a where dual :: a -> a -------------------------------------------------------------------------------- -- * Tableau -- | Shape (of tableaux, skew tableaux) class HasShape a s | a -> s where shape :: a -> s -------------------------------------------------------------------------------- -- * Trees -- | Number of nodes (of trees) class HasNumberOfNodes t where numberOfNodes :: t -> Int -- | Number of leaves (of trees) class HasNumberOfLeaves t where numberOfLeaves :: t -> Int -------------------------------------------------------------------------------- -- * Permutations -- | Number of cycles (of partitions) class HasNumberOfCycles p where numberOfCycles :: p -> Int --------------------------------------------------------------------------------