Thanks! Somehow, the, now blindingly obvious, fact that a monad must be a mapping into (not onto, right, at least in general?) is something I had missed, although it did lead me to be puzzled about join.
So, although you could have a functor from N to R, there is no way it could be a monad. In Haskell, it would be Integer instead of N, since the category we deal with for Haskell Monads are Haskell types. Does a typeclass, like Num or Eq, form a category? I know that you can't restrict an instance of Monad to be only over a particular typeclass, but could I have an EqMonad, with all of the non-sugar properties of Monad? 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