
On 10/11/2012 04:48 PM, Christopher Howard wrote:
Point of curiosity: Does an error in a Haskell program have a negative impact on the compilers reasoning about or optimization of the code, even if said error is never reached in the control flow? For example, both of the following would have the same result:
code: -------- case mExp of Nothing -> expr Just x -> f x
-- or...
if isNothing mExp then expr else f (fromJust mExp) --------
In my naive reasoning, I would think that in the latter case the use of fromJust introduces, from the compilers perspective, an additional possible outcome (an error being thrown). This presumably would complicate the compilers reasoning about the code, unless of course the compiler is smart enough to figure out that the error will never be reached.
Once upon a time, Ben Lippmeier showed me that, foo | something_always_true = bar | otherwise = error "this is impossible" is slower than, foo | something_always_true = bar so I am pessimistic about your example. I would presume GHC does better on the first one.