[Haskell-cafe] questions on lazy pattern, StateT monad

Wolfgang Jeltsch wolfgang at jeltsch.net
Thu Nov 24 15:05:21 EST 2005


Am Donnerstag, 24. November 2005 02:08 schrieb David Menendez:
> Wolfgang Jeltsch writes:
> > If we use an implementation of State *without lazy patterns*, it
> > becomes something like this:
> >
> >   \s -> case next s of
> >           (x,s') -> case everyting s' of
> >                   (xs,s'') -> ((x : xs),s'')
> >
> > Note that I used case expressions to realize strict patterns because
> > pattern binding in let expressions is implicitely lazy.
> >
> > Now lets apply the function denoted by the last code fragment to some
> > initial state and try to extract just the first element of the
> > output.  In order to do so we have to take the result of the function
> > and match it against ((x : _),_).  Especially, we have to reduce the
> > pair, i.e., we have to make sure that it's really an application of
> > (,) and not _|_.
>
> Would the lazy pattern match be equivalent to using fst and snd?
>
>     \s -> case next s of
>               p1 -> case everything (snd p1) of
>                        p2 -> (fst p1 : fst p2, snd p2)

I think so.

Best wishes,
Wolfgang


More information about the Haskell-Cafe mailing list