Can you explain the imperative code? I understand that it has to do with lists being monads and all, but I don't get why
(return ([1..10]*2)) :: [Integer]
doesn't work. What's the magic behind x <- [1..10]
?