I create a lot of temporary variables in Haskell:
main = do
let nums'' = [1..10]
let nums' = a . bunch . of_ . functions $ nums''
let nums = another . bunch . of_ . functions $ nums'
print nums
That is, I don't want to write a long chain of functions like so:
let nums = another . bunch . of_ . functions . a . bunch . of_ . functions $ [1..10]
Because it becomes unreadable to me, so I try to group the functions according to what they do. In the process I end up creating a bunch of ugly temporary variables like nums''
and nums'
(I could give them more meaningful names, but the point still stands...every new line means a new variable).
This is a case where a shadowed variable would result in cleaner code. I'd like to do something like:
let nums = [1..10]
nums = a . bunch . of_ . functions $ nums
nums = another . bunch . of_ . functions $ nums
I.e. exactly the same as above but without the temporary variables. Is there any way to do this in Haskell? Maybe the whole thing could be wrapped in a "transaction":
atomically $ do
(...this code...)
return nums
Something that would let Haskell know that the code in this section contains shadowed variables, and it should only worry about the end result. Is this possible?