[Haskell-cafe] Explaining monads
Lanny Ripple
lanny at cisco.com
Tue Aug 14 12:32:08 EDT 2007
Look! You are doing it again! :) Does that paragraph even
contain the word "Monad"? :)
I'm aware a monad is an abstraction and as such it doesn't *do*
anything. My point was along the lines that you don't need to
know that your working in a field to be able to learn that
3/2 = 1.5
.
-ljr
Jeff Polakow wrote:
>
> Hello,
>
> There is clearly a problem with the Haskell/monad tutorials out there...
>
> > The tutorials seriously need to step back and start with
> > something like, "To enforce order of evaluation we evaluate
> > closures* returning a defined type. The first closure will feed
> > its result to the second which will in turn feed it's result to
> > the third. Since the third closure can't be evaluated without
> > having the results from the second and first (and thus they had
> > to be evaluated earlier in time) we get a defined evaluation
> > sequence. Here are some examples..."
> >
> The style of this description is nice; however the description itself is
> wrong.
>
> Monads DO NOT determine order of evaluation. Previous posts on this
> thread give several examples.
>
> In lazy languages, data dependencies determine the order of evaluation.
> X must be evaluated before Y if Y depends upon the result of X. You can
> force the order of evaluation without using a monad just as you can have
> a monad which does not determine the order in which things get evaluated.
>
> From the point of view of a programmer, a monad is simply a useful
> (higher-order) combinator pattern. All monadic code can be flattened by
> replacing occurrences of bind (>>=) with it's definition.
>
> One general intuition about monads is that they represent computations
> rather than simple (already computed) values:
>
> x :: Int -- x is an Int
>
> x :: Monad m => m Int -- x is a computation of an Int
>
> x :: [Int] -- x is a computation of an Int which can
> return multiplie values
>
> x :: Maybe Int -- x is a computation of an Int which might
> fail (return Nothing)
>
> x :: State s Int -- x is a computation of an Int which relies
> on, and returns (possibly modified)
> -- a value of type s. Note: State s Int is
> isomorphic to: s -> (Int,s)
>
> x :: IO Int -- x is a computation of an Int which can
> interact with the outside world.
>
> Return explains how to make a simple computation which returns a
> specified value.
> Bind explains how to use the result of a computation to compute
> something else.
>
> -Jeff
>
> ---
>
> This e-mail may contain confidential and/or privileged information. If you
> are not the intended recipient (or have received this e-mail in error)
> please notify the sender immediately and destroy this e-mail. Any
> unauthorized copying, disclosure or distribution of the material in this
> e-mail is strictly forbidden.
--
Lanny Ripple <lanny at cisco.com>
ScmDB / Cisco Systems, Inc.
More information about the Haskell-Cafe
mailing list