[Haskell-cafe] couple of questions on monads
sdh33 at cornell.edu
Mon Oct 13 18:16:12 EDT 2008
2008/10/13 Daryoush Mehrtash <dmehrtash at gmail.com>:
> Is there a write up on what makes an implementation lazy vs strict?
I would be interested in seeing this, too!
> I like to better understand the trade off between the two and use cases
> where one is better than the other.
> I noticed that some functions in the lazy implementation uses "~" . For
> evalStateT :: (Monad m) => StateT s m a -> s -> m a
> evalStateT m s = do
> ~(a, _) <- runStateT m s
> return a
> What does ~ do?
Here's one I can answer. ~ causes Haskell to do the pattern match
lazily. Normally, when you write
(a,_) <- runStateT m s
it eagerly evaluates the runStateT m s far enough to determine that
the result is in fact a tuple in the underlying monad (as opposed to,
say, fail). Adding the ~ tells Haskell to not do any computation
until it actually needs the value of a. You can find a better
explanation and examples at
More information about the Haskell-Cafe