On Wed, 2009-02-04 at 23:13 +0200, Tymur Porkuian wrote: > Actually, I understand these types in terms of containers that > override standard method of function application for their contents.
Huh? You can't actually over-ride function application --- Haskell's built-in application always does exactly the same thing, at every type. You can, however, define new application-like operators that have other application-like behaviors. Haskell has a few of these: * return * (<$>) * (<*>) * (>>=) > In fact, there may be no contents, or several items, or nothing at > all, or something strange, but the container behaves like there is a > value of some type inside it. > > In these terms: > Maybe - container that may or may not contain something > [a] - container that contains several values and applies function to all of > them > State - container that has some other "secondary" value in it. > IO - container that remembers passed functions and later will ask user > for value, then apply functions to it. Nice but irrelevant. And I think your definition of IO is wrong. > > * Monad: A monad M allows a function of n arguments (for n >= 0) to be > > applied to n M values; in addition, if the function returns an M value > > itself, you can combine that result with the arguments in a sensible > > way. > > Here, what does "sensible" mean? Sensible. As in, the definition of `join' in your monad can't be senseless, or irrelevant to the monad's intended use. > What do we override? join > Also, would it be right to say that Arrow is a container for functions > that overrides function chaining? No. jcc _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe