In theory, yes, but the situation becomes more complicated for higher-order languages such as Haskell than it is for first-order(ish) languages such as Java.* 1) Consider the higher-order function 'map'. With tracked exceptions you would probably want to give it a type such as: map :: forall a b e. (a -> b throws e) -> [a] -> [b] throws e I.e., you need some kind of exception polymorphism, or severely restrict the kind of functions you would be allowed to pass to map (basically those that are guaranteed to not raise any exceptions). 2) One of the most commonly encountered run-time exception in Haskell is a pattern-match failure. Whether or not these are triggered depends not only on the control flow within your program, but also on the data flow, making them harder to track. Some relevant references would be: - Kevin Glynn, Peter J. Stuckey, Martin Sulzmann & Harald Søndergaard. "Exception analysis for non-strict languages". ICFP '02. http://dl.acm.org/citation.cfm?id=581488 - Ruud Koot & Jurriaan Hage. "Type-based exception analysis for higher-order non-strict languages with imprecise exception semantics". Submitted to ICFP '14. http://www.staff.science.uu.nl/~0422819/tbea/icfp14.pdf Ruud * Technically, object-oriented languages are also higher-order languages and one can find examples where the lack of exception polymorphism can cause trouble for Java's tracked exception mechanism. On Thu, Mar 13, 2014 at 5:15 PM, Silvio Frischknecht <silvio.frischi@gmail.com> wrote:
Hi everyone,
It's always very annoying not knowing what could go wrong (what exceptions might be thrown) when calling a library function. In java doc, for instance, you can usually see what exceptions can be thrown by a specific function. I was wondering if this could be achieved for haskell by tracing "throw" and "catch" calls.
Silvio _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe