# [Haskell-cafe] Re: N and R are categories, no?

Steve Downey sdowney at gmail.com
Mon Mar 19 19:13:22 EDT 2007

```Thanks. I am trying to develop some intuition / understanding of
monads outside category Fun, because I suspect that once I do, they
will be both simpler and more interesting.

I think if I take the category N to be the natural numbers and the
algebraic functions of a single variable to be the arrows, then the
functor that takes n to 2n might be a monad. That is, a coordinate
transform should be monadic.

-smd

On 3/15/07, Nicolas Frisby <nicolas.frisby at gmail.com> wrote:
> That said, N and R are indeed categories; however, considering them as
> categories should be carefully interlaced with your intuitions about
> them as types.
>
> I haven't formally checked it, but I would bet that this endofunctor
> over N, called Sign, is a monad:
>
>   Sign x = x + x
>   Pos = injectLeft
>   Neg = injectRight
>
>   unit = Pos
>   join (Pos (Pos n)) = Pos n
>   join (Pos (Neg n)) = Neg n
>   join (Neg (Pos n)) = Neg n
>   join (Neg (Neg n)) = Pos n
>
> Pos and Neg are just labels for sign. I'm assuming N is the naturals,
> not the integers; thus this monad might actually be useful :). Also
> note that this means there is not necessarily a mapping from F x -> x.
> Neg 3 should not necessarily map to 3. Also, this structure is
> probably satisfies many more laws than just the monad laws--e.g.
> monoids or monoidals.
>
> So while it might not always make sense to consider N and R as
> categories when learning about category theory and Haskell, it might
> be helpful to learn about monads (and other notions) in categories
> simpler than the Fun category of functional types and partial
> functions--N and R are could be good categories for such learning.
> Have fun!
>
> On 3/15/07, Ulf Norell <ulfn at cs.chalmers.se> wrote:
> >
> >
> > On 3/15/07, Steve Downey <sdowney at gmail.com> wrote:
> > > EOk, i'm trying to write down, not another monad tutorial, because I
> > > don't know that much yet, but an explication of my current
> > > understanding of monads.
> > >
> > > But before I write down something that is just flat worng, I thought
> > > I'd get a cross check. (and I can't get to #haskell)
> > >
> > > Monads are Functors. Functors are projections from one category to
> > > another such that structure is preserved. One example I have in mind
> > > is the embedding of the natural numbers into the real numbers. The
> > > mapping is so good, that we don't flinch at saying 1 == 1.0.
> >
> >  Monads are endofunctors (functors from one category to itself). This is
> > easy to see from the type of join:
> >
> >  join : m (m a) -> m a
> >
> >  For Haskell monads the category is the category of Haskell types and
> > Haskell functions. In this category N and R are objects, so you'll get the
> > wrong idea trying to see them as categories.
> >
> >  / Ulf
> >
> >
> > _______________________________________________
> > Haskell-Cafe mailing list