Programming Erlang: Software for a Concurrent World (Pragmatic Programmers)