I'm a Haskell programmer who lives in Cambridge with my wife Emily and son Henry (who has grown up a little since the photo on the right was taken). I have a PhD in Computer Science from York University, working on making functional programs shorter, faster and safer. Since then I've worked with F# at Credit Suisse and Haskell/C++ at Standard Chartered, taking the lessons of functional programming and applying them in finance. I'm a strong believer in the functional approach, finding the combination of conciseness, static-typing and testability to offer significant advantages - see my blog for more. To get in touch email me at ndmitchell AT gmail DOT com.
Open Source Projects
I develop a number of open source Haskell projects, all of which can be found at my Github page. Some of my more popular projects include:
- Shake - a library for writing build systems, an alternative to make.
- Hoogle - a Haskell API search engine, searching the standard Haskell libraries by function name and type signature.
- HLint - an automatic analysis tool to suggest improvements to Haskell code.
- Uniplate - a library for writing concise traversals over data types.
My research interests cover functional programming and the theoretical side of computer science, a complete list of my papers can be found under Downloads. My current research topics include:
- Supercompilation - a technique for optimising programs in a general yet powerful way. Advanced optimising compilers are complex, my hope is that supercompilation can simplify them and improve the performance (read more).
- Generic programming - functional programs tend to be more concise than alternatives, but often they still contain repitition of redundancies. This repitition is both time consuming to write and a common source of bugs. There are many approaches to generic programming, but I focus on approaches that are both simple and low-overhead, sacrificing flexibility and power (read more).
- Build systems - while make is unbiquitous, it is not without its flaws. I have worked on build systems that let people express dependencies more precisely, resulting in faster and more accurate rebuilds (read more).