[Haskell-cafe] Re[2]: strict Haskell dialect
Bulat Ziganshin
bulatz at HotPOP.com
Sun Feb 5 11:36:06 EST 2006
Hello Brian,
Saturday, February 04, 2006, 4:50:44 AM, you wrote:
>>> One question is how to get some kind of "do" notation that would
>>> work well in a strict setting.
>>> The existing "do" notation makes use of lazyness in so far as the
>>> second arg of >> is only evaluated when needed. Perhaps a new
>>> keyword such as "go" could be used to use >>= instead ie:
BH> If strictness was the default (eg if the language were ML not Haskell), then
BH> in
BH> putStr "hello" >> putStr (show 1)
BH> both args to >>> would be evaluated before >> was called. Thus putStr (show
BH> 1) would be evaluated before the combined monad is actually run, which would
BH> be wasteful if we were using a monad with a >> function that only runs the
BH> rhs conditionally on the result of the lhs.
BH> If Haskell were a strict language I think an equivalent for the do notation
BH> would have to lift everything (except the first expression) and use >>=
BH> instead of >>> .
it seems that you misunderstand the monads (or may be i misunderstand :)
each and every monadic operation is a function! type "IO a" is really
"RealWorld -> (RealWorld,a)" and the same for any other monad. concept
of the monad by itself means carrying "hidden" state from one monadic
operation to the next. that allows to _order_ monadic operations plus
this state used for zillions other things, including state, logs,
fails and so on, so on
--
Best regards,
Bulat mailto:bulatz at HotPOP.com
More information about the Haskell-Cafe
mailing list