HdpH (Haskell distributed parallel Haskell) is a Haskell DSL for shared- and distributed-memory parallelism, implemented entirely in Haskell (as supported by the GHC). HdpH is described in the following paper:

P. Maier, P. W. Trinder. Implementing a High-level Distributed-Memory Parallel Haskell in Haskell. IFL 2011.

HdpH executes programs written in a monadic embedded DSL for shared- and distributed-memory parallelism. HdpH operates a distributed runtime system, scheduling tasks either explicitly (controled by the DSL) or implicitly (by work stealing). The runtime system distinguishes between nodes and schedulers. A node is an OS process running HdpH (that is, a GHC-compiled executable built on top of the HdpH library), whereas a scheduler is a Haskell IO thread executing HdpH expressions (that is, Par monad computation). As a rule of thumb, a node should correspond to a machine in a network, and a scheduler should correspond to a core in a machine.

The semantics of HdpH was developed with fault tolerance in mind (though this version of HdpH is not yet fault tolerant). In particular, HdpH allows the replication computations, and the racing of computations against each other. The price to pay for these features is that HdpH cannot enforce determinism.