Functional Programming Distributed Systems