Combining Lists, Monads & Applicative Functors

A common problem Say I am writing some code in Haskell, and I have a value of type a and a list of type [b] that I want to convert into a list of type [(a,b)] where every entry is one of the pair of the a value and one of the values from the …

A datastore is a monad transformer

In the paper attached to my last post, I proved that any data store is a monad.  Then I proved that if the data was a monoid (so it has a zero and addition) then the store is a monoid too.  And then I asserted that if the data is a monad, then so is the …

Distributed storage in Haskell

As a part of my general programme of developing  a distributed monadic MapReduce implementation in Haskell (as described here), I have been working slowly on the distributed infrastructure required to do this, using CloudHaskell.  I have now succeeded in producing a very general proof-of-concept for distributed storage. This introduces some interesting challenges, as we want …

MapReduce as a monad transformer

Current status A while ago, I wrote a piece describing a simple way of implementing MapReduce as a Monad in Haskell.  As part of my further research I’ve discovered that in fact MapReduce is very naturally a Monad Transformer.  This means that given any monadic type m one can associate to it a MapReduce type …

Steps towards Haskell in the cloud

Introduction I have a considerable interest in the use of massively parallel cloud systems for handling hard problems, but unfortunately they currently rely on extremely complex infrastructure that is quite intrusive when it comes to writing applications.  My intention is, and has been, to find a simple framework that can be used to provide cloud …

Implementing MapReduce in Haskell

Summary MapReduce is a general technique for massively parallel programming developed by Google.  It takes its inspiration from ideas in functional programming, but has moved away from that paradigm to a more imperative approach. We have found that MapReduce can be expressed naturally, using functional programming techniques, as a form of monad, which we have …