[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