[Haskell-cafe] Documenting the impossible
Andrew Coppin
andrewcoppin at btinternet.com
Sun Jun 15 04:15:49 EDT 2008
Henning Thielemann wrote:
> I think it is another instance of mixing up errors and exceptions (you
> know the haskellwiki pages ...)
>
> Since an 'error' marks a programming error (which should never occur)
> it would not hurt the program if all 'error's are replaced by
> 'undefined', an illegal memory access or any other misbehaviour. So
> 'error' is exactly what you propose as IMPOSSIBLE pragma. A compiler
> option for replacing all 'error's by nops would do want you want.
OK, so suppose I write a module that contains a function that accepts a
number parameter, and that parameter must be greater than 2. I have no
control over what value users of the library pass to my function.
Suppose some client calls my function with 1 as an argument - is that an
error, or an exception?
On the other hand, suppose I write the same function, but now it's not
exported. So the only code that can possibly call this function is my
own code. So I can [theoretically] guarantee it will never be called
with the "wrong" argument [assuming the code I write isn't defective].
As far as I can tell, there's no way of making this distinction in
Haskell code. You'd use "error" in both cases - or if you're feeling
brave, remove it in the second case and hope you're right. I'm just
saying it would be nice to be able to keep it in the code for
maintainability's sake, but not have the runtime penalty for it once
you're "sure" your code is safe.
It looks like Don's "assert" thing might be able to do this. [I had no
idea this existed by the way...]
Hmm, this gives me a new idea for a feature request - how about a
function that evaluates to the source code line number it was called
from? ;-)
More information about the Haskell-Cafe
mailing list