SPLASH 2020
Sun 15 - Fri 20 November 2020 Online Conference

We present Hoogle+, a component-based synthesizer for Haskell that takes as input a specification in the form of a type, a set of input-output tests, or both, and returns a list of candidate programs composed of functions from popular Haskell libraries. Hoogle+ focuses on the end-to-end usability of synthesis: i.e., how to help programmers solve their tasks faster. Usability depends crucially on whether and how the programmer can specify their own intent and comprehend the tools results. Hoogle+ addresses the specification problem by allowing the user to specify goals via tests from which it automatically infers type signatures that facilitate rapid synthesis. Hoogle+ uses property based testing to ensure the user only sees _useful and _unique candidates, and generates example usages to illustrate the _functionality of each candidate to help the user comprehend their semantics in order to choose the right result. We evaluate the usability of Hoogle+, with a user study with 30 participants of varying Haskell proficiency,that shows that programmers generally solve tasks faster with Hoogle+, and that they were able to solve 50% more tasks when equipped with Hoogle+.