expression in where-block are evaluated multiple times if they have a type signature
In this code
x is only evaluated once:
Start = (x, x) where x = trace_n "eval" ()
If however the type signature is added,
x is evaluated twice:
Start = (x, x) where x :: () x = trace_n "eval" ()
This is a pity, as I prefer adding as many type signatures as possible, so I currently loose performance without a reason.