[Haskell-beginners] runState (liftM (+100) pop) [1, 2, 3, 4] (Example from LYH)

Francesco Ariis fa-ml at ariis.it
Tue Oct 24 09:32:53 UTC 2017


On Tue, Oct 24, 2017 at 10:17:46AM +0100, Olumide wrote:
> ghci> runState (fmap (+100) pop) [1,2,3,4]
> (101,[2,3,4])
> 
> Even though I'm still struggling to wrap my mind around monads, I sort of
> understand what's going on here. The problem is that I can't explain why the
> function (+100) is applied to _only_ the value 1 in (1,[2,3,4]).

Hello Olumide,
    if we look at the instance of `fmap` for State we'll find (more or
less):

    fmap :: (a -> b) -> State s a -> State s b

So fmap modifies the *result*, not the *state* itself.

If we also recall that `State s a` is nothing but `\s -> (a, s)` then
it is easy to see that only the first element of the tuple (the
so called result, `a`) will be modified.

Does this clear your doubts?


More information about the Beginners mailing list