[Haskell-cafe] Relevance and applicability of category theory

Miguel Mitrofanov miguelimo38 at yandex.ru
Wed Jan 30 19:59:02 EST 2008

```> 1. Are Haskell monads useful in a truly categorical sense?
> 2. Is Haskell's functor class misnamed?

I'm confused. It seems for me that either I don't understand math or I
don't understand you.

> 1. Categorical monads are a class of functors, that is, morphisms on
> Cat.  Haskell's monads are at least a bit closer to the categorical
> idea than Haskell's functors by virtue of having the same domain and
> beyond sequencing computation, and the validity of their definition,
> would be much more clear if someone explained the meaning of adjoint
> functors to and from Hask.  In other words, provide the mathematical

Well, Haskell monad, you know, consists of three parts: 1) a map
m:Ob(Hask) -> Ob(Hask) (by Ob I mean the class of objects of a
category); 2) a morphism X -> m(X) for all X's, and 3) a map from
Hask(X,m(Y)) to Hask(m(X),m(Y)) - that is, from the set of morphisms X-
>m(Y) to the set of morphisms m(X)->m(Y) - for all X's and Y's. That
is, I believe, what's called a 'Kleisli triple' in math; it's well
known that Kleisli triples are equivalent to monads (in mathematical
sense).

> 2. Functors are structure preserving maps in the category Cat.  The
> Haskell Functor class represents structure preserving maps in the

What do you mean? A Haskell Functor, first of all, maps types to types
- that is, objects of Hask to objects of Hask. Therefore, it becomes a

> 3. I believe the documentation stating that Haskell arrows are a
> too and in that context bear a much more distant relationship to

Of course not. They have Haskell objects as domains and codomains. I
mean, by defining an Arrow class, you really define another category,
which has the same objects as Hask, but different morphisms (arrows).

>  Or is one particular element in Hask its domain and possibly
> another its codomain?

What do you mean by 'element in Hask'? Hask is a category, it has
objects, it has morphisms (arrows), but elements?
```