Haskell is an advanced, general-purpose, purely functional programming language. It has a strong, static type system with Hindley-Milner type inference.
The language natively supports lazy evaluation, and functions are generally not allowed to have side effects. This leads to a concise and declarative style of programming, which differs quite a bit from conventional languages. By not allowing side effects and dealing with immutable data, the compiler can avoid whole classes of bugs.
Haskell generally compiles to fast, native code, but it can also be compiled to other targets like JavaScript (through GHCJS) or LLVM.
In Google Summer of Code, we attempt to improve not only the language, but the whole ecosystem. This includes (aside from the language itself):
- Compilers
- Commonly used libraries
- Commonly used applications written in Haskell
- Profilers, debuggers and other tools
- Package managers and infrastructure
We have compiled an ideas list together with long-time Haskell users, compiler contributors and researchers, and as such we believe these are important projects for the industry and academia both.
- Twitter: We have a list of project ideas.
In this list, prominent members of the Haskell community have suggested projects they care to address and fit well (time- and subject-wise) within the scope of the Google Summer of Code. The current authors of this list range from university professors (e.g., Eisenberg) to advanced ghc developers (e.g., Gamari). Yet, contributions to the project ideas list is still open, inviting students to propose variations of the current ideas or a completely new project. The Haskell.org community is welcoming and happy to discuss these ideas with prospective students, via IRC or our mailing lists.
Each project is labeled with its difficulty level, ranging from "Beginner", targeting newcomers, to "Advanced", better fitted for students who already have experience with Haskell. The exact prerequisites differ from project to project, thus it is suggested for students to contact their prospective mentor before submitting an application.
From our side, when evaluating the student applications it is crucial that the applicant understands the problem and knows how to tackle it. Students should break down the project into smaller problems, assigning difficulty and time estimates to those sub-problems and explain how these sub-problems fit in the bigger picture of the project.
We also suggest adding some more information about the student's experience and education (if any), even if this relates to another programming language or technology.