Write a Blog >>
Sun 22 - Fri 27 October 2017 Vancouver, Canada
Fri 27 Oct 2017 14:37 - 15:00 at Regency A - Usability and Deadlock Chair(s): Jonathan Aldrich

Type inference is convenient by allowing programmers to elide type-annotations, but this comes at the cost of often generating very confusing and opaque type error messages, which are of little help to fix type errors. Though there have been many successful attempts at making type-error messages better in the past thirty years, many classes of errors are still difficult to fix. In particular, current approaches still generate imprecise and uninformative error messages for type errors arising from errors in grouping constructs like parentheses and brackets. Worse, a recent study shows that these errors usually take more than 10 steps to fix and occur quite frequently (around 50% to 60% of all type-errors) in programs written by students learning functional programming. We call this class of errors, nonstructural errors.

We solve this problem by developing LEARNSKELL, a type error debugger that uses machine learning to help diagnose and deliver high quality error messages, for programs that contain nonstructural errors. While previous approaches usually report type errors on typing constraints or on the type level, LEARNSKELL generates suggestions on the expression level. We have performed a study on more than 1,000 ill-typed programs, and the result shows that LEARNSKELL is quite precise. It can capture 89% of nonstructural errors and locate the error cause with a precision of 65%/87% with the first 1/3 messages, respectively. This is several times more than the precision of state-of-the-art compilers and debuggers. We have also studied the performance of LEARNSKELL and found out that it scales to large programs.