Internships on Haskell and GHC, at Microsoft Research, Cambridge

Microsoft Research Cambridge runs two internship programmes:

  • The PhD student internship programme is mainly for graduate students in mid-PhD. This is not an absolute requirement; for example, post-PhD is certainly possible. It has an annual cycle, with applications due by end Feb. The internship itself is for 12 weeks, usually over the summer, but the precise timing is flexible. You don't need to be an EU citizen.
  • The undergraduate Bright Minds programme is for undergraduates. Again there's an annual cycle with an application deadline of end Feb. The internship runs for 8 weeks, and the timing is fixed. You need to have the right to work in the UK (so the lab doesn't have to get work permits), which in practice means EU citizens.

What is an internship?

An internship is a paid post 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.

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

Last modified 5 years ago Last modified on Mar 16, 2015 5:32:16 PM