The distributed-closure package

[Tags:bsd3, library, test]


[Skip to Readme]


Dependencies base (>=4.8 && <5), binary (>=0.7.5), bytestring (>=0.10), constraints (>=0.4), syb (>=0.5), template-haskell (>=2.10) [details]
License BSD3
Copyright © Tweag I/O Limited
Author Mathieu Boespflug
Stability Unknown
Category Control
Home page
Source repository head: git clone
Uploaded Mon Mar 20 18:34:03 UTC 2017 by MathieuBoespflug
Distributions LTSHaskell:, NixOS:, Stackage:, Tumbleweed:
Downloads 321 total (67 in the last 30 days)
1 []
Status Docs available [build log]
Last success reported on 2017-03-20 [all 1 reports]




Maintainer's Corner

For package maintainers and hackage trustees

Readme for distributed-closure

Readme for distributed-closure-


Build Status

Leverage the -XStaticPointers extension from GHC 7.10 onwards for distributed programming using lightweight serializable closures. This package implements a serializable closure abstraction on top of static pointers. Serializable closures can be shipped around a computer cluster. This is useful for implementing intuitive and modular distributed applications. See this blog post for a hands on introduction and this paper for the original motivation.


In GHC 8 and above, remoting a computation on another node using this library goes along the lines of

data NodeId

-- Assume we're given a spaw primitive.
spawn :: NodeId -> Closure (IO ()) -> IO ()

-- A computation to remote on another node.
hello :: String -> IO ()
hello name = putStrLn ("Hello, " ++ name)

main = do
  name <- getLine
  spawn "someAddress" (static hello `cap` name)

distributed-closure does not implement sending/receiving/spawning closures - that's left for higher-level frameworks. Only closure creation, composition and (de)serialization.