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 <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> wrote:
>
>
> On 3/15/07, Steve Downey <[EMAIL PROTECTED]> 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
> Haskell-Cafe@haskell.org
> http://www.haskell.org/mailman/listinfo/haskell-cafe
>
>

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to