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

Nicolas Frisby nicolas.frisby at gmail.com
Thu Mar 15 12:57:10 EDT 2007

```That said, N and R are indeed categories; however, considering them as
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
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
> >
> > 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
>
> Haskell functions. In this category N and R are objects, so you'll get the
> wrong idea trying to see them as categories.
>
>  / Ulf
>
>
> _______________________________________________