
On 22/08/05, Chung-chieh Shan
Michael Vanier
wrote in article <20050819054742.5C785103BE4@orchestra.cs.caltech.edu> in gmane.comp.lang.haskell.cafe: Basically, though, the Haskell implementation _is_ the category theoretic definition of monad, with bind/return used instead of (f)map/join/return as described below.
Doesn't the Haskell implementation really correspond to the notion of a strong monad in category theory, once we take into account the fact that free variables can occur anywhere in the arguments to bind and return?
Well, I had a look at the definition of strong monad. It seems that for the obvious symmetric monoidal structure given by (,) any Haskell monad admits the following strength, making it a strong monad: strength :: (Monad m) => (a, m b) -> m (a,b) strength (x, xs) = xs >>= (\a -> return (x,a)) It's less clear to me that any symmetric monoidal structure on the category of Haskell types admits a strength for any Haskell monad. It's also not so clear that it will always be unique. (This would be fairly interesting) Even if this is so, since Haskell monads don't come with a strength pre-defined, I'd hesitate to call them "strong" in the same way that I'd hesitate to call a metrisable topological space a metric space: the information isn't attached to begin with. - Cale