On 12/20/12 10:05 PM, Jay Sulzberger wrote:
What does the code for going backwards looks like? That is, suppose we have an instance of Category with only one object. What is the Haskell code for the function which takes the category instance and produces a monoid thing, like your integers with 1 and usual integer multiplication? Could we use a "constraint" at the level of types, or at some other level, to write the code? Here by "constraint" I mean something like a declaration that is a piece of Haskell source code, and not something the human author of the code uses to write the code.
instance C.Category k => Monoid (k a a) where mempty = C.id mappend = (C..)
The above gives witness to the fact that, if I'm using the language correctly, if we choose any object (our "a") in any given category, this induces a monoid with the identity morphism as unit and composition of endomorphisms as append.
The standard libraries in fact provide this instance for the function arrow category (under a newtype wrapper):
newtype Endo a = Endo { appEndo :: a -> a } instance Monoid (Endo a) where mempty = Endo id Endo f `mappend` Endo g = Endo (f . g) --Gershom
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe