[Haskell-beginners] Capture the notion of invertible

Brent Yorgey byorgey at seas.upenn.edu
Thu Mar 20 13:47:30 UTC 2014


On Thu, Mar 20, 2014 at 02:18:12AM -0400, Javran Cheng wrote:
> Off topic:

This is not off topic for the beginners list at all. =)

> This comment makes perfect sense to me, because "monoid-like" reminds
> me of Data.Monoid,
> which does not totally capture what I know about monoid: monad is
> "just a monoid in the category of endofunctors"

The "monoid" being referred to here is a very generalized sense of the
word, and is quite different from (though distantly related to)
Haskell's Monoid type class.

> but Monad is not in any sense fit into a Monoid.
> Here I find that when I talk about "monoid-like", I actually refer to Category,
> and Monad is an instance of Category, which backs up my guess.

"Monad is an instance of Category" --- this doesn't really make
sense as stated.  It's certainly not true that every instance of Monad
is also an instance of Category; the kinds don't even match.  It is
true that you can build a Category out of a Monad, though there are
actually several ways to do so.  The most well-known in the Haskell
world is Kleisli, but there are other ways.

> In a word, can I say that when talking about reducing data (Sum,
> Product, etc.), I'm referring to Monoid,
> and when I talking about monoid-like composition, I'm referring to
> Category?

"monoid-like composition" can refer to Monoid too.  The essential
difference is *types*: in particular you can think of a Category as a
"typed Monoid": with a Monoid, *any* two things can be composed.  With
a Category, you can only compose things whose types match.  So
conversely you can also think of a Monoid as a "Category with only one
type".  As an (easy) exercise:

  newtype Endomorphism cat a = E (cat a a)

  instance Category cat => Monoid (Endomorphism cat a) where
    ...

-Brent

> 
> Javran
> 
> > Date: Tue, 18 Mar 2014 02:48:21 +0700
> > From: Kim-Ee Yeoh <ky3 at atamo.com>
> > To: The Haskell-Beginners Mailing List - Discussion of primarily
> >         beginner-level topics related to Haskell <beginners at haskell.org>
> > Subject: Re: [Haskell-beginners] Capture the notion of invertible
> >         functions
> > Message-ID:
> >         <CAPY+ZdTyj81gcUaZJfHGeta8rbjxup8ReKHJ=iy7ePzKkQPomQ at mail.gmail.com>
> > Content-Type: text/plain; charset="iso-8859-1"
> >
> > > When you're talking about invertible functions, the idea you're probably
> > reaching for is an isomorphism -- that is, we want the function to have
> > certain nice properties on top of just being a map from a -> b with an
> > inverse map from b -> a.
> >
> > The usual meaning of 'f is invertible' is that it is both left- and
> > right-invertible, thus making it bijective: see first bullet in [1].
> >
> > Here you're alluding to f being merely left-invertible, something I don't
> > see mentioned in OP.
> >
> > > You also want the function to be a bijection, which is captured in the
> > notion of an isomorphism.
> >
> > I'm reminded of a reddit convo where the idea was tossed out that
> > semigroups should always be promoted to monoids [2].
> >
> > I argued no. I also cited a case where a supposedly nicer monoid causes
> > more problems for a ghc hacker than the true semigroup [3].
> >
> > Having structure is nice. And sometimes we just have to work with what's
> > given to us.
> >
> > Category theory calls a /monomorphism/ something that's strictly weaker
> > than left-invertible. An arrow that's (additionally) left-invertible
> > corresponds to a /split mono/.
> >
> > Hence in order of _decreasing_ niceness: Iso, Split mono, Mono. As research
> > uncovers more interesting phenomena, this sequence will continuing growing
> > to the right.
> >
> > We can't always impose that niceness because that nukes whatever we're
> > studying. So we gotta respect the situation. And given lemons, make
> > lemonade.
> >
> >
> > [1]
> > http://en.wikipedia.org/wiki/Bijection,_injection_and_surjection#Bijection
> >
> > [2]
> > http://www.reddit.com/r/haskell/comments/1ou06l/improving_applicative_donotation/ccvtqot?context=1
> >
> > [3]
> > http://www.reddit.com/r/haskell/comments/1ou06l/improving_applicative_donotation/ccy4n2d
> 
> 
> 
> 
> 
> -- 
> Javran (Fang) Cheng
> _______________________________________________
> Beginners mailing list
> Beginners at haskell.org
> http://www.haskell.org/mailman/listinfo/beginners
> 


More information about the Beginners mailing list