JSON-RPC is a simple and well supported protocol for
remote procedure calls over HTTP,
supporting both synchronous remote methods calls
and asynchronous notifications. We want to access JSON-RPC from Haskell,
but in a principled way. This blog post discusses the design and user-facing interface
a new library for JSON-RPC that makes use of the
remote monad design pattern
The remote monad design pattern is a way of encapsulating external
The idea is that, rather than directly call a remote or external procedure,
we instead give the external procedure call a service-specific monadic
type, and invoke the external procedure call using a monadic “send” function.
Specifically, a remote monad is a monad that has its evaluation function in
a remote location, outside the local runtime system.
This blog article, the first in a series, examines reflecting
shell commands for accessing external data from Haskell.
We will look at the
PlistBuddy OSX UNIX command, its
internal shell, and how to provide access to this shell for Haskell
Two papers from the University of Kansas Functional Programming Group have been accepted for publication at Haskell’15! One about using HERMIT for equational reasoning, and the other about a monad-based design pattern for remote control that externalizes monadic execution. We’ve put the preprints on our webpage.