Version 36 (modified by heisenbug, 5 years ago) (diff)

add Richard

Internships on Haskell and GHC, at Microsoft Research, Cambridge

Microsoft Research Cambridge now runs a year-round internship programme. You can apply for an internship slot in any area covered by the lab, but Simon and I are of course keen to attract strong applications from people interested in functional programming, Haskell, and GHC.

What is an internship?

An internship is a paid post, for three months (occasionally up to 6), at Microsoft Research in Cambridge (MSRC). You get to work on a project agreed, usually in advance, with your MSRC sponsor. Both parties benefit. You get to work in a leading-edge research lab, with fantastic people floating around all the time. We get the benefit of your hard work, and perhaps the start of a collaborative relationship.

Almost all interns are in the middle of their PhD. This is not an absolute requirement; for example, post-PhD is certainly possible. However, if you are, say, an undergraduate you'd need to be exceptional to beat out the PhD applicants.

In principle, Microsoft owns any intellectual property you generate, but this isn't relevant for an open-source project like GHC. You're also strongly encouraged to publish your work as a paper, often written jointly with your sponsor.

Who is eligible?

Internships are aimed primarily at students currently studying for a PhD. It's not a cast-iron requirement, but if you are pre-PhD you'd need to argue that you were rather exceptional in some way.

Internships to work on Haskell and GHC

Simon and I always have a zillion projects that we'd like to see done, but do not have time to do. An internship is a chance for you to work closely with us --- we usually meet with interns daily, and we never have more than one at a time --- on one of these projects. (Or you can suggest a project of your own.)

Internship projects should have some research content, and ideally lead to a paper. It's not just hacking.

To give you some idea, here are some past projects (in approximate date order):

  • 2014: Joachim Breitner made foldl a good consumer wrt. list fusion
  • 2013: Jan Stolarek worked on Cmm optimizations and added new primops
  • 2013: Richard Eisenberg implemented closed type families
  • 2010: David Terei worked on the LLVM back end
  • 2008: Thomas Schilling worked on the GHC API, and Scion
  • 2008: Jost Berthold worked on parallel evaluation
  • 2007: Dan Licata implemented view patterns
  • 2007: Peng Li worked on a new concurrency substrate for GHC
  • 2007: Michael Adams worked on refactoring the code generator, and [2008] John Dias took the same ideas much further.
  • 2007: Bernie Pope implemented the GHCi debugger
  • 2007: Ben Lippmeier implemented a new register allocator
  • 2006: Roshan James wrote a parallel garbage collector
  • 2006: Kevin Donnelly changed GHC's intermediate language to support equality constraints
  • Geoff Washburn made the first implementation of GADTs in GHC
  • Dimitrios Vitytonis worked on type inference for impredicative polymorphism
  • Krasimir Angelov completed and released Visual Haskell

Here a bunch of suggestions.

How to apply

You can apply ANY TIME. Internships are not just the summer months. Contact one of us (simonpj@…, marlowsd@…) in the first instance (or another sponsor if they are more suitable).

To apply, follow the instructions at, and email one of us to say that you have done so. Do not omit the latter step; across MSR there are hundreds of applicants, and if we don't hear from you personally we may miss your application. If you don't get a reply to your email, try again - the spam filter may have caught it.

A CV is typically a boring, dry kind of thing, consisting entirely of data (education, employment, publications, talks etc etc). Yes, we need that, but please also include a final section entitled "Personal research statement". This should address the following questions:

  • What really excites you and fills you with wild enthusiasm?
  • What you are proud of in your existing track record?
  • What you are working on now?
  • What sort of thing you would like to do if you came here?
  • (Brutal, but frank.) Why should we pick you?

Typically your personal research statement will be a couple of pages long, but it's really up to you. You don't need to address the above questions in the order given, and you can range more widely if you want. (You should find the same writeup useful for other purposes.) Write in the first person, and try to convey something of yourself rather than just data.

MSRC has lots of other interesting work on programming languages too: F#, security, etc. Check it out here.


So long as we have enough budget, we run the following four internship "slots":

  • Jan-Mar
  • Apr-Jun
  • July-Sept
  • Oct-Dec

We usually take decisions about a particular slot three months before it begins (e.g. December, for the Apr-Jun slot).

Simon Peyton Jones and Simon Marlow