> 4) res <- fmap pureFunction ioFunction === let res = pureFunction {You might have misunderstood. The 'let' in the do notation is already
> ioFunction}
>
>
> From a distance, let and monadic bind are just different forms of name
> binding.
>
> But haskell's let has an effectlessness that makes it declaratively
> different from its cousin in, say, ocaml.
>
> This is no small change you're proposing.
different from the normal 'let' in that it doesn't have an 'in' for
example. {} should of course only work inside a do block.