GSoC/GCI Archive
Google Summer of Code 2014

License: New and Simplified BSD licenses

Web Page:

Mailing List: is the community focus for supporting and promoting the open-source programming language Haskell.


  • Adding profiling support to GHCJS -- JavaScript backend for GHC Glasgow Haskell Compiler(GHC) supports profiling. When programs are run in profiling mode, an output file that shows run times and memory allocations of specific pieces of code are printed to a file by the runtime system. This feature is currently missing in JavaScript backend for GHC, GHCJS. In this project, we aim to fix this by implementing profiling support for GHCJS.
  • Agda-like Interaction Mode for Emacs In dependently typed languages (like Agda or Idris), it’s usual for the environment to help you writing the code, as a sort of dialog. The main idea is that the developer can include “holes” in the source code. Emacs interprets those holes specially and allows some special commands inside them. Since Agda and Idris are dependently-typed variations of Haskell, I think that there’s the possibility of implementing a similar features for the Haskell mode. The aim is to produce such piece of code.
  • An Efficient Computational Algebra and Symbolic Linear Algebra Library in H Gröbner basis computation is becoming more and more important. In this project, I will implement the fast and efficient algorithms, F4 and F5, to compute Gröbner basis. These algorithms require efficient symbolic sparse linear algebra computation, which Haskell lacks currently, so implementing such functionality also constitutes the important part of this project.
  • Concurrent Lock-Free Hash Map for Haskell My proposal is to implement the following ticket: The purpose is to have highly performant, library quality concurrent datastructures for haskell. These are to be implemented without locking using atomic operations. Specifically I want to implement an Hash Map. Probably: Lock free hash Table by Cliff Click
  • Darcs: Hashed Files and Cache Hashed files in darcs follow the same idea as in git repositories or the bittorrent protocol: a file is saved on the disk using its own hash as name. Darcs uses them in many places. However some aspects could be improved. This project aims at improving manageability of the global cache, and at adding a few features to take advantage of it.
  • Darcs; History reordering: performance and features The goal of this project is to improve history reordering and make the most of it. Automatic history reordering is an operation that is the basis of many commands of darcs. Then we want to add two features: a minimizing context feature for "darcs send", and a dependency graph generation that would enable a third party software and darcsden to visualize a darcs repository in a non-linear way. As a prelude to this work, we will measure and fix performance of automatic history reordering.
  • Flesh out features of Hackage 2 The new Hackage offers many novel features: package candidates, custom documentation, build reports, even a rudimentary tag system. However, often these are not used to their full potential – they are either difficult to use, not exposed in the interface, have outstanding bugs, or some combination of the three. This project aims to finish these features, so they are stable and useful to the community.
  • HDBC Improvements I plan to improve the Haskell Database Connectivity (HDBC) libraries, in particular to optimise and resolve some issues in the HDBC-ODBC driver. I’m aiming to improve the efficiency of the library and resolve some outstanding issues. In order to validate my results, I also plan to provide a more comprehensive testing and benchmarking suite to compare the various database drivers. This itself is an important contribution to the library as it would help others who work on these libraries.
  • Implement Constraint-Based Layout in Diagrams Many diagrams are defined without knowing precise coordinates; instead, they use constraints. Currently, these constraints are solved externally and then given to diagrams. This GSOC will implement a linear constraint layout system using a pre-existing external constraint solver. I will modify diagrams-core and diagrams-library to remove any assumptions they make about numbers, so that they can be used as-is, with constraint types or with other types such as arbitrary-precision numbers.
  • Lenisfy Diagrams The goal is to lens-ify the Haskell library ‘diagrams’, in order to make it possible to (efficiently) traverse over diagrams and subdiagrams, modifying them in the process, and to work with other lens abstractions like lenses, prisms or folds where appropriate.
  • Pandoc improvements: Embedded base64 images and EPUB 3.0 reader Pandoc is one of the most widely used universal document converters and, as a result, it has become one of Haskell's flagship projects. I propose a two-part project: the first is to modify the image type to allow embedded images and the second, larger part, is to implement a reader for EPUB documents which would make use of this additional functionality.