[Haskell-cafe] Categories (cont.)
Jay Sulzberger
jays at panix.com
Fri Dec 21 04:48:42 CET 2012
On Thu, 20 Dec 2012, Gershom Bazerman <gershomb at gmail.com> wrote:
> 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
Thanks, Gershom!
I think I see. The Haskell code picks out the
"isotropy/holonomy" monoid at the object a of any Haskell
Category instance.
actual old fashioned types remark: To get the holonomy
semigroup^Wmonoid, interpolate a functor.
I am glad that Haskell today smoothly handles this.
ad paper on polymorphisms: I hope to post a rant against the
misleading distinction between "parametric polymorphism" and "ad
hoc polymorphism". Lisp will be used as a bludgeon in the only
argument in the rant. The Four Things Which Must Be
Distinguished will perform the opening number.
oo--JS.
More information about the Haskell-Cafe
mailing list