
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)
--
David Menendez