This question is actually what got me into Haskell in the first place.
It was 2015-ish, height of the blockchain boom, and I’d recently learned Erlang to learn to build distributed systems because I was interested in generalizing git
from file trees to arbitrary data structures. A friend pointed me towards Cloud Haskell and distributed-process, which is based on the paper Towards Haskell in the Cloud, and I ended up learning Haskell because this.
Cloud Haskell was simultaneously mindblowing, and also not the answer I was looking for. It’s more of a remote process management and network transport good for setting up RPC, but also lacking any tools to make your data model / functions actually distributed like in git and other blockchains. Honestly, I get more use out of servant
because JSON APIs provide interop with other services.
After that I read lots of various papers about process calculi, and actor systems, but those models were not very functional, and were often stateful / object-oriented (Actor models be object oriented? I’m shocked!) or again focused on transport and not content.
Ever since then, I’ve been working on my own model of distributed computing by extending a type system to describe both who is performing a calculation and how it is fragmented, and to use merkle proofs to make arbitrary expressions distributable (distributed-turing-complete?). My cryptography work is going to collide spectacularly with my weird blogs about indexed recursion in the future.