git.iko.soy/distributed-process
on master help sign in
Cleanup
440f2bdEdsko de Vries
distributed-process/src/Control/Distributed/Process.hs+2
@@ -64,6 +64,7 @@ module Control.Distributed.Process
64 , send
64 , send
65 , getSelfPid
65 , getSelfPid
66 , RemoteCallMetaData
66 , RemoteCallMetaData
67+ , initRemoteCallMetaData
67 -- * Monitoring and linking
68 -- * Monitoring and linking
68 , link
69 , link
69 , unlink
70 , unlink
@@ -140,6 +141,7 @@ import Data.Accessor ((^.), (^=), (^:))
140import System.Random (randomIO)
141import System.Random (randomIO)
141import Control.Distributed.Process.Internal.NodeController (runNodeController)
142import Control.Distributed.Process.Internal.NodeController (runNodeController)
142import Control.Distributed.Process.Internal ( RemoteCallMetaData
143import Control.Distributed.Process.Internal ( RemoteCallMetaData
144+ , initRemoteCallMetaData
143 , NodeId(..)
145 , NodeId(..)
144 , LocalProcessId(..)
146 , LocalProcessId(..)
145 , ProcessId(..)
147 , ProcessId(..)
distributed-process/src/Control/Distributed/Process/Closure.hs+7−6
@@ -20,21 +20,24 @@
20--
20--
21-- > unClosure :: Typeable a => Closure a -> Process a
21-- > unClosure :: Typeable a => Closure a -> Process a
22--
22--
23+-- In general, given a monomorphic function @f : a -> b@ the corresponding
24+-- function @$(mkClosure 'f)@ will have type @a -> Closure b@.
25+--
23-- The call to 'remotable' will also generate a function
26-- The call to 'remotable' will also generate a function
24--
27--
25-- > __remoteCallMetaData :: RemoteCallMetaData -> RemoteCallMetaData
28-- > __remoteCallMetaData :: RemoteCallMetaData -> RemoteCallMetaData
26--
29--
27-- which can be used to construct the 'RemoteCallMetaData' used to initialize
30-- which can be used to construct the 'RemoteCallMetaData' used to initialize
28−-- Cloud Haskell. You should have one call to 'remotable' per module, and
31+-- Cloud Haskell. You should have (at most) one call to 'remotable' per module,
29−-- compose all created functions when initializing Cloud Haskell:
32+-- and compose all created functions when initializing Cloud Haskell:
30--
33--
31-- > let metaData = M1.__remoteCallMetaData
34-- > let metaData = M1.__remoteCallMetaData
32-- > . M2.__remoteCallMetaData
35-- > . M2.__remoteCallMetaData
33-- > . ...
36-- > . ...
34-- > . Mn.__remoteCallMetaData
37-- > . Mn.__remoteCallMetaData
35−-- > $ Map.empty
38+-- > $ initRemoteCallMetaData
36--
39--
37−-- See Section 6, Faking It, of Towards Haskell in the Cloud for more info.
40+-- See Section 6, /Faking It/, of /Towards Haskell in the Cloud/ for more info.
38{-# LANGUAGE TemplateHaskell #-}
41{-# LANGUAGE TemplateHaskell #-}
39module Control.Distributed.Process.Closure
42module Control.Distributed.Process.Closure
40 ( unClosure
43 ( unClosure
@@ -53,7 +56,6 @@ import Control.Monad.Reader (ask)
53import Control.Exception (throw)
56import Control.Exception (throw)
54import Language.Haskell.TH ( -- Q monad and operations
57import Language.Haskell.TH ( -- Q monad and operations
55 Q
58 Q
56− , report
57 , reify
59 , reify
58 -- Names
60 -- Names
59 , Name
61 , Name
@@ -102,7 +104,6 @@ remotable :: [Name] -> Q [Dec]
102remotable ns = do
104remotable ns = do
103 (closures, decoders, inserts) <- unzip3 <$> mapM process ns
105 (closures, decoders, inserts) <- unzip3 <$> mapM process ns
104 metaData <- createMetaData inserts
106 metaData <- createMetaData inserts
105− report False "Cloud Haskell '__remoteCallMetaData' generated"
106 return $ concat closures ++ concat decoders ++ metaData
107 return $ concat closures ++ concat decoders ++ metaData
107
108
108-- | Deserialize a closure
109-- | Deserialize a closure
distributed-process/src/Control/Distributed/Process/Internal.hs+6
@@ -1,6 +1,7 @@
1module Control.Distributed.Process.Internal
1module Control.Distributed.Process.Internal
2 ( -- * Global CH state
2 ( -- * Global CH state
3 RemoteCallMetaData
3 RemoteCallMetaData
4+ , initRemoteCallMetaData
4 , -- * Node and process identifiers
5 , -- * Node and process identifiers
5 NodeId(..)
6 NodeId(..)
6 , LocalProcessId(..)
7 , LocalProcessId(..)
@@ -45,6 +46,7 @@ import Control.Concurrent.Chan (Chan)
45import Control.Category ((>>>))
46import Control.Category ((>>>))
46import Control.Exception (Exception)
47import Control.Exception (Exception)
47import Data.Map (Map)
48import Data.Map (Map)
49+import qualified Data.Map as Map (empty)
48import Data.Int (Int32)
50import Data.Int (Int32)
49import Data.Typeable (Typeable)
51import Data.Typeable (Typeable)
50import Data.Dynamic (Dynamic)
52import Data.Dynamic (Dynamic)
@@ -97,6 +99,10 @@ instance Show ProcessId where
97-- | Used to fake 'static' (see paper)
99-- | Used to fake 'static' (see paper)
98type RemoteCallMetaData = Map String Dynamic
100type RemoteCallMetaData = Map String Dynamic
99
101
102+-- | Initial (empty) remote-call meta data
103+initRemoteCallMetaData :: RemoteCallMetaData
104+initRemoteCallMetaData = Map.empty
105+
100-- | Local nodes
106-- | Local nodes
101data LocalNode = LocalNode
107data LocalNode = LocalNode
102 { localNodeId :: NodeId
108 { localNodeId :: NodeId
distributed-process/tests/TestClosure.hs+1−2
@@ -1,6 +1,5 @@
1module Main where
1module Main where
2
2
3−import qualified Data.Map as Map (empty)
4import Control.Monad.IO.Class (liftIO)
3import Control.Monad.IO.Class (liftIO)
5import Control.Concurrent (forkIO)
4import Control.Concurrent (forkIO)
6import Control.Concurrent.MVar (MVar, newEmptyMVar, readMVar, takeMVar, putMVar)
5import Control.Concurrent.MVar (MVar, newEmptyMVar, readMVar, takeMVar, putMVar)
@@ -93,7 +92,7 @@ testSendProcClosure transport metaData = do
93main :: IO ()
92main :: IO ()
94main = do
93main = do
95 Right transport <- createTransport "127.0.0.1" "8080" defaultTCPParameters
94 Right transport <- createTransport "127.0.0.1" "8080" defaultTCPParameters
96− let metaData = __remoteCallMetaData Map.empty
95+ let metaData = __remoteCallMetaData initRemoteCallMetaData
97 runTests
96 runTests
98 [ ("SendPureClosure", testSendPureClosure transport metaData)
97 [ ("SendPureClosure", testSendPureClosure transport metaData)
99 , ("SendIOClosure", testSendIOClosure transport metaData)
98 , ("SendIOClosure", testSendIOClosure transport metaData)