Let vs. Where
This seems to be only a matter of taste in the sense of "Declaration vs. expression_style", however there is more about it.It is important to know that
that is, it can be written whereever expressions are allowed.In contrast to that,
like the pattern matching line of a function definition.
Consider you have the function
f :: s -> (a,s) f x = y where y = ... x ...
However, transforming to
f :: State s a f = State $ \x -> y where y = ... x ...
f :: s -> (a,s) f x = let y = ... x ... in y
This is easily transformed to:
f :: State s a f = State $ \x -> let y = ... x ... in y