-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Polyvariadic functions mapping to a given monoid -- -- A polyvariadic function takes an indefinite number of possibly -- differently typed parameters. polyToMonoid provides two polyvariadic -- functions that map their parameters into a given monoid. @package polyToMonoid @version 0.1 -- | Creates polyvariadic functions that map their parameters into a given -- monoid. module Data.PolyToMonoid -- | Define instances of Monoidable to tell Haskell how to convert your -- parameters into values in the underlying monoid class Monoid m => Monoidable a m toMonoid :: Monoidable a m => a -> m -- | Conceptually, ptm is defined as: -- --
-- ptm (mempty :: MyMonoid) p1 p2 ... pN = -- (toMonoid p1) `mappend` (toMonoid p2) `mappend` ... `mappend` (toMonoid pN) --class Monoid m => PolyVariadic m r ptm :: PolyVariadic m r => m -> r -- | ctm is a composable variant of ptm. -- -- To actually get its value, use the terminator function trm. class Monoid m => CPolyVariadic m r ctm :: CPolyVariadic m r => m -> r data Terminate m Terminate :: m -> Terminate m -- | Use the terminator function trm to get the value of a ctm calculation. trm :: Terminate m -> m instance [incoherent] (Monoidable a m, PolyVariadic m r) => PolyVariadic m (a -> r) instance [incoherent] (m' ~ m, Monoid m') => PolyVariadic m m' instance [incoherent] (Monoidable a m, CPolyVariadic m r) => CPolyVariadic m (a -> r) instance [incoherent] (m' ~ m, Monoid m') => CPolyVariadic m (Terminate m')