Ideas are the soft currency of academia. On this page we maintain a list of the theory and practice of our ideas, and other practices.

Constrained Type-Class Instances

In Haskell, there are many data types that could be made instances of standard type classes such as Functor and Monad, were it not for the presence of type-class constraints on the operations on that data type. This is a frustrating problem in practice, because there is a considerable amount of support and infrastructure for standard type classes that these data types cannot use. We call this the Constrained-Type-Class Problem.

Lab Rules

We are a research lab, working on funded research, and discovering things that were not previous known.

Observable Sharing

Observable Sharing is where the sharing implicit in a set of data-structures can be observed.

The Remote Monad Design Pattern

The remote monad design pattern is a way of making Remote Procedure Calls (RPCs), and other calls that leave the Haskell eco-system, considerably less expensive. The idea is that, rather than directly call a remote procedure, we instead give the remote procedure call a service-specific monadic type, and invoke the remote 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.

Worker Wrapper

The worker/wrapper transformation is a technique for transforming a computation of one type into a worker of a different type, together with a wrapper that acts as an impedance matcher between the original and new computations. The technique can be used to improve the performance of functional programs by improving the choice of data structures used.