GSoC/GCI Archive
Google Summer of Code 2015

License: New and Simplified BSD licenses

Web Page:

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

Haskell is an advanced purely-functional programming language. An open-source product of more than twenty years of cutting-edge research, it allows rapid development of robust, concise, correct software. With strong support for integration with other languages, built-in concurrency and parallelism, debuggers, profilers, rich libraries and an active community, Haskell makes it easier to produce flexible, maintainable, high-quality software.


  • A standalone functional parser for CommonMark CommonMark is a standard, unambiguous syntax specification for Markdown, which is being developed by a committee of Markdown fans; its goal is to obviate some of the technical shortcomings of the original Markdown specs and remedy the painful lack of Markdown standardisation. This summer, I intend to write a standalone, extensible, pure-Haskell library for parsing CommonMark.
  • A Strict language pragma for GHC Adding two language pragmas to GHC, StrictData and Strict, that will enable Haskell developers to default to strict evaluation on a per module basis. This is useful when writing high performance code in Haskell.
  • Darcsden improvements I want to work on the improvements for the darcsden project. Darcsden is a web platform, akin to github or bitbucket, for hosting darcs repositories. This involves three main ideas.
  • Exhaustiveness Checker for PureScript Pattern matches in PureScript are currently not checked for exhaustiveness at compile time, which can lead to unexpected failures at run-time. The main goal from this project is to provide an exhaustiveness checker for pattern match errors that allows non-exhaustive patterns to exist, yet ensures that a pattern match error does not occur and thus avoiding unexpected crashes while executing a program.
  • Fast splittable pseudorandom number generator for System.Random Random number generation is vital for cryptography, non-deterministic algorithms or modelling. With cheap multicore processors, the language which utilizes the given resources without compromising the properties of the generated pseudorandom numbers and achieving maximum speedup is more likely to be used for computation-intensive industrial applications. However, the current standard library splittable generator has performance and correctness flaws which the following proposal is to address.
  • Haddock improvements Haddock is documentation generator tool and a vital element of Haskell ecosystem. The aim of this project is to implement Haddock improvement ideas proposed by Haskell community in various media, such as markup extensions and hyperlinked source code generation.
  • Implement nix-like package management features in cabal Cabal dependency hell has been a source of trouble to many haskell developers. One of the main reason behind this is the breaking re-installation problem in which one package can be unusable after installing another. An elegant solution to this problem has already been implemented in nix package manager 10 years ago. I want to borrow some ideas from nix and implement it in cabal.
  • Implementation of Layered Gramamar of Graphics The project aim is to implement layered Grammar of Graphics, in Haskell using Diagrams as back-end.The core ideas is to start with the raw data and think about all the transformations, statistics, etc. that go into graphing it. With a good framework, this can help us see connections between different graphs and create new ones.You’ll realize that a pie chart is basically just a stacked bar chart plotted in polar coordinates, with bar height mapped to pie-slice angle.
  • Implementing Version Comparison for Cabal Packages This document proposes a new command-line program and associated library that would identify interface differences between two versions of a cabal package. In this context, the term “interface” refers to any part of the cabal package that constitutes its public API, including every module export. Users will be able to view summaries of package changes in a variety of formats, and a long-term goal of this proposal is to integrate this functionality into Hackage.
  • Improvements For HBLAS And Adding LAPACK Bindings. HBLAS is an important submodule in Haskell Numerical. It helps matrix computation efficient, and it probably will have a greate impact on scientific computing in the future of Haskell. HBLAS now has some basic BLAS API bindings. I will provide the rest of the BLAS bindings and docs. And then work on the bindings with LAPACK.
  • Improvements to yesod-devel Coming up with a yesod devel server based on the package yesod-devel-beta. One that is more general, more powerful and is able to work with all haskell web applications.
  • Improving Hackage Discoverability With the update to of Hackage to Hackage 2.0, a large amount of functionality was added -- most notably, improved search, and better handling of package metadata (such as categories and tags). However, in its current state, it can difficult to discover new or widely-used packages, or to find the best package for a particular task. My proposal is to improve Hackage, both visually and functionally, with the goal of making Haskell packages more easily discoverable.
  • Interactive widgets in IHaskell Mathematica provides a good interface for plotting graphs and then manipulating constants to get real-time changes in the plot. The goal of this project is to add such facilities to the IHaskell package. The major work of this proposal is to implement: 1) A Haskell equivalent of the `interact' function provided by IPython in `Python.html.widgets.interaction'. 2) All widgets required for implementing the `interact' function.
  • Native Haskell Type Encoding for LiquidHaskell LiquidHaskell is a correctness-checking system that brings refinement types to Haskell. The current implementation parses type signatures and other specifications from special comments in Haskell source code. The majority of user issues - crashes and unclear error messages - trace back to this portion of the codebase, hampering widespread adoption. I propose to replace this with a system that encodes refinement types in Haskell's type system, achieving code reuse and deeper integration with GHC.
  • Pursuit enhancements Enhance PureScript's Pursuit tool to provide better searching by names, searching by types, and a centralized documentation store - the three of these together should make it significantly easier to discover and use PureScript libraries.
  • Refactor program with HLint suggestions Industrial strength refactoring tools are something that the Haskell community as a whole has desired for a number of years. As a result a number of projects have spawned to provide varying levels of abstraction to the refactoring process. Recently, ghc-exactprint has promised to provide a robust foundation for refactoring. This summer I propose to use ghc-exactprint and HaRe to add a --refactor flag to HLint which will automatically apply relevant suggestions.
  • Replication back-end for acid-state Data storage is important when designing stateful real world applications. A solution most native to Haskell is acid-state. It provides ACID properties and is able to use one back-end at a time. Therefore its reliability is limited by harddisk failure (be it local or remote). To address this issue, I propose to realize a replication back-end for acid-state using a message queue.
  • STM Data Structures Implementation The goal of this project is to develop high quality concurrent STM data structures using recent developments in lock-free data structures as a guide but relying on STM for simple and clear concurrent semantics.