git.iko.soy/distributed-process
on master help sign in
Closure version of newChan
1b74f54Edsko de Vries
distributed-process/src/Control/Distributed/Process/Closure.hs+2
@@ -108,6 +108,7 @@ module Control.Distributed.Process.Closure
108 , cpUnlink
108 , cpUnlink
109 , cpSend
109 , cpSend
110 , cpExpect
110 , cpExpect
111+ , cpNewChan
111 -- * @Closure (Process a)@ as a not-quite-monad
112 -- * @Closure (Process a)@ as a not-quite-monad
112 , cpReturn
113 , cpReturn
113 , cpBind
114 , cpBind
@@ -154,6 +155,7 @@ import Control.Distributed.Process.Internal.Closure.CP
154 , cpUnlink
155 , cpUnlink
155 , cpSend
156 , cpSend
156 , cpExpect
157 , cpExpect
158+ , cpNewChan
157 -- @Closure (Process a)@ as a not-quite-monad
159 -- @Closure (Process a)@ as a not-quite-monad
158 , cpReturn
160 , cpReturn
159 , cpBind
161 , cpBind
distributed-process/src/Control/Distributed/Process/Internal/Closure/CP.hs+14
@@ -6,6 +6,7 @@ module Control.Distributed.Process.Internal.Closure.CP
6 , cpUnlink
6 , cpUnlink
7 , cpSend
7 , cpSend
8 , cpExpect
8 , cpExpect
9+ , cpNewChan
9 -- * @Closure (Process a)@ as a not-quite-monad
10 -- * @Closure (Process a)@ as a not-quite-monad
10 , cpReturn
11 , cpReturn
11 , cpBind
12 , cpBind
@@ -32,12 +33,15 @@ import Control.Distributed.Process.Internal.Types
32 , ProcessId
33 , ProcessId
33 , LocalNode(remoteTable)
34 , LocalNode(remoteTable)
34 , procMsg
35 , procMsg
36+ , SendPort
37+ , ReceivePort
35 )
38 )
36import Control.Distributed.Process.Internal.Primitives
39import Control.Distributed.Process.Internal.Primitives
37 ( link
40 ( link
38 , unlink
41 , unlink
39 , send
42 , send
40 , expect
43 , expect
44+ , newChan
41 )
45 )
42import Control.Distributed.Process.Internal.Closure.TH (remotable, mkStatic)
46import Control.Distributed.Process.Internal.Closure.TH (remotable, mkStatic)
43import Control.Distributed.Process.Internal.MessageT (getLocalNode)
47import Control.Distributed.Process.Internal.MessageT (getLocalNode)
@@ -83,6 +87,9 @@ sendDict SerializableDict = send
83expectDict :: SerializableDict a -> Process a
87expectDict :: SerializableDict a -> Process a
84expectDict SerializableDict = expect
88expectDict SerializableDict = expect
85
89
90+newChanDict :: SerializableDict a -> Process (SendPort a, ReceivePort a)
91+newChanDict SerializableDict = newChan
92+
86---- Serialization dictionaries ------------------------------------------------
93---- Serialization dictionaries ------------------------------------------------
87
94
88-- | Specialized serialization dictionary required in 'cpBind'
95-- | Specialized serialization dictionary required in 'cpBind'
@@ -141,6 +148,7 @@ remotable [ -- Monadic operations
141 -- Explicit dictionaries
148 -- Explicit dictionaries
142 , 'sendDict
149 , 'sendDict
143 , 'expectDict
150 , 'expectDict
151+ , 'newChanDict
144 -- Serialization dictionaries
152 -- Serialization dictionaries
145 , 'sdictBind
153 , 'sdictBind
146 -- Specialized processes
154 -- Specialized processes
@@ -175,6 +183,12 @@ cpSend dict pid = Closure decoder (encode pid)
175cpExpect :: Typeable a => Static (SerializableDict a) -> Closure (Process a)
183cpExpect :: Typeable a => Static (SerializableDict a) -> Closure (Process a)
176cpExpect dict = staticClosure ($(mkStatic 'expectDict) `staticApply` dict)
184cpExpect dict = staticClosure ($(mkStatic 'expectDict) `staticApply` dict)
177
185
186+-- | Closure version of 'newChan'
187+cpNewChan :: Typeable a
188+ => Static (SerializableDict a)
189+ -> Closure (Process (SendPort a, ReceivePort a))
190+cpNewChan dict = staticClosure ($(mkStatic 'newChanDict) `staticApply` dict)
191+
178--------------------------------------------------------------------------------
192--------------------------------------------------------------------------------
179-- (Closure . Process) as a not-quite-monad --
193-- (Closure . Process) as a not-quite-monad --
180--------------------------------------------------------------------------------
194--------------------------------------------------------------------------------