Hi,

The variable is not reassigned, but hidden. The do notation is a syntactic sugar for:

[1, 2, 3] >>= (\a ->
[a + 1] >>= (\a ->
return a))

The second 'a' is inside a nested lambda function and therefore inside a nested scope. The first 'a' still exists, but the value to which it refers is hidden inside the second lambda function, where 'a' is bound to a different value.

On 28.04.2015 11:53, Shishir Srivastava 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