Simon Peyton Jones
251
radical are by definition not evolutionary from the state of where things are
at.
Today “where things are at” is that big companies are pouring immense
resources into ecosystems and editors and profilers and tools and
programmers and skills and all that kind of stuff. The mainstream is, by
definition, deeply practical. Meanwhile this radical and elegant stuff of
functional programming has much less of that deep, infrastructural support.
But at the same time that doesn’t necessarily make it self-indulgent to
pursue it. Because, after all, unless some people are working on radical and
elegant things you’re going to end up in a local optimum, incrementally
optimizing the mainstream but stuck on a low hill.
So I think that one of the good things about the whole business of academic
research is that professors can go off and do sort of loopy things without
being asked how it’s benefiting the bottom line. Some will do things that
turn out to be fantastically important, and some less so; but you can’t tell
which is which in advance! So my big-picture justification for why it’s worth
some people, like me, spending a lot of time on purely functional
programming, is that it shows promise. I don’t want to claim that it’s exactly
the way that everyone will be writing programs in the future, but it shows
promise. And actually I’ll make the case that it shows increasing promise. I
see it as, when the limestone of imperative programming is worn away, the
granite of functional programming will be observed.
That said, I think purely functional programming started quite geeky and
academic and mathematical. The story of the last, really, 20 years—all the
time I’ve been working on it—has been a story of becoming increasingly
practical, focusing not just on abstract ideas but trying to overcome, one by
one, the obstacles that prevent real-life programmers using functional
programming languages for real applications. The development of Haskell
itself is an example of that.
It’s good that there are a bunch of people out here, maybe slightly
impractical, who are heading towards the mainstream and maybe the
perspectives you learn over here in the purely functional world can inform
and illuminate the mainstream. That, you can see, has happened. Lots of
stuff about type systems and generics were originally developed in the
context of functional programming languages. It was a kind of laboratory in