Neon

Hage

What is Neon?

The Neon library is a domain specific embedded language written in and to be used in tandem with Haskell. Its purpose is to analyze large collections of student written programs logged by the Helium compiler. We plan to use it to investigate the following:

  • how is the Helium compiler used, e.g., do hints for correcting type errors help?
  • how do students learn to program Haskell/Helium, e.g., should list comprehension be taught before or after general recursion, how does knowledge of Java help or interfere with students learning Haskell?
  • how do students use the Haskell language, e.g., which language features do they avoid, how deeply nested is a typical let construct?

The main development characteristics are that

  1. it should be an easy and effective way of writing queries on the collection of loggings
  2. it should allow a large amount of reuse across queries
  3. it should be possible to add new ways of combining queries into new ones
  4. it should generate esthetically pleasing results in multiple formats (PNG pictures of various graphic forms, Latex tables and HTML tables are currently supported, the PNG files are generated by a third party tool called Ploticus)
  5. we want to reuse as much as possible code written for the Helium compiler

An example of a generated picture can be found below

The system was developed by Peter van Keeken as part of his Master's thesis project, under the guidance of Jurriaan Hage

More extensive examples

The following is a typical output generated by the system. The system generated an HTML file, which includes tables formatted in HTML and links to the graphical plots for the information in the tables. The pictures typically show different facets, in increasingly more detail. Usually, an overall picture is given, then information organized per week of the course, and sometimes even give information for particular students. The headers for the pictures are a bit cryptic. This has to do with the fact that they were automatically generated. We are planning to improve that.

  • Phase research: we consider the ratios between the number of lexical, parse, type and other static errors with respect to the total number of compiles. We also give the absolute numbers, to show the significance. The data set we used is from the course year 2004/2005.
  • Compilation interval analysis: how often do students invoke the compiler? Does that change over the course period?
  • Typing error correction research: here we consider the time between the occurrence of a type error, and the first subsequent correct compile.

Download

The Neon library can be downloaded here: Click to download neon-dist.gz

See the README on how to compile and use the system. The data sets that we have collected over the years while logging with Helium are not part of this download. If you are interested in obtaining these data sets contact the owner of this web page.

For experimentation reasons, a small collection of loggings has been included.

Documentation for the system can be found in the Master thesis of Peter van Keeken.

If you want to generate graphical output, you are going to need the Ploticus program.

-- JurriaanHage - 22 Aug 2007