If you rewrite your example without do notation, you'll get: [1,2,3] >>= \a -> [a+1] >>= return a You can notice that first `a` and the last one are different things. They are just different bindings that happen to have the same name (You'll get the shadowing warning if enable -Wall). They have nothing in common and can have different types as well. On Tue, Apr 28, 2015 at 12:53 PM Shishir Srivastava < shishir.srivastava@gmail.com> wrote:
Hi,
Please can anyone explain how does 'a' get re-used in the code below. My understanding so far of haskell is that variables are not allowed to mutate or re-assigned.
--- do a <- [1,2,3] a <- [a+1] return a
[2,3,4] ---
Thanks, Shishir
_______________________________________________ Beginners mailing list Beginners@haskell.org http://mail.haskell.org/cgi-bin/mailman/listinfo/beginners