Paul Chiusano

Functional programming, UX, tech, econ


Consulting services

I offer Scala and FP consulting services. If you're interested in working together, please contact me.

About my book

My book, Functional Programming in Scala, uses Scala as a vehicle for teaching FP. Read what people are saying about it.

Popular links

Unison: a next-gen programming platform the worldwide elastic computer (coming soon)
Type systems and UX: an example
CSS is unnecessary

Can type systems provide a better way of organizing game interactivity?

I’ve been playing through Alien: Isolation. The game is well-executed, gorgeous, scary, and yet limited in a way that makes it unsatisfying. I’ll talk about that, but a bit of context on the game first:


A nice, purely functional alternative to sinks and wormholes in UI programming

There’s a common antipattern used in UI frameworks that are otherwise quite nice—the use of sinks or “wormholes” for interactive UI elements rather than explicit control flow. Sinks and wormholes are close cousins of explicit callbacks, and are bad for many of the same reasons, even when they don’t break referential transparency. I’ll explain the problematic pattern and outline a simple, purely functional solution with nicer properties.


In search of a better abstract machine for nonstrict languages

For a while, I’ve been curious if it’s possible to develop a better runtime for nonstrict languages. Despite the advantages of pervasive nonstrictness in a language, a drawback is that nonstrict languages make it more difficult to reason about space usage. Much of this is people being unfamiliar with nonstrictness and surprised when it performs differently than a strict language, but some of it is the fact that the normal order evaluation doesn’t provide an obvious compositional means of assigning space usage to programs. Reasoning about space usage in a nonstrict language is nonlocal.


The failed economics of our software commons, and what you can about it right now

Progress in the software industry has been crushed under the weight of technical debt accumulated over the last 40 years. The tools, languages, libraries, and platforms we all rely on suffer from massive incidental complexities responsible for billions of dollars in wasted productivity. Anyone who spends any amount of time as a developer and loses days, weeks, or months implementing some library that “should” exist or working around some shitty software tech to implement a task that “should be simple” knows, deep down, that this can’t be the best humans are capable of. It’s not that we don’t know any better. Given more time and resources that could be devoted to tasks other than shipping the next release, most programmers at least have ideas for how to do things better. But we never seem to get these resources because of the failed economics of our software commons. I’ll explain the problem and tell you can what you can do right now to start changing the game. (Spoiler: check out, and after you’re convinced what a great idea it is go fund their launch.)


Viewing a program as a UI: an early demo

In an earlier post, I showed a demo of semantic program layout in Unison. Here, I’d like to demonstrate the ability of Unison program rendering to embed graphical views. This will seem like just a neat trick at first, but like the “finger pointing at the moon”, it’s leading to a deeper shift in how we think about programming. I hope to convey some of the gravity of this perspective.