@@ -6,6 +6,7 @@ module Control.Distributed.Process.Internal.Closure.CP
9 -- * @Closure (Process a)@ as a not-quite-monad
10 -- * @Closure (Process a)@ as a not-quite-monad
10 , cpReturn
11 , cpReturn
@@ -32,12 +33,15 @@ import Control.Distributed.Process.Internal.Types
32 , ProcessId
33 , ProcessId
33 , LocalNode(remoteTable)
34 , LocalNode(remoteTable)
36import Control.Distributed.Process.Internal.Primitives
39import Control.Distributed.Process.Internal.Primitives
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
90+newChanDict :: SerializableDict a -> Process (SendPort a, ReceivePort a)
91+newChanDict SerializableDict = newChan
86---- Serialization dictionaries ------------------------------------------------
93---- Serialization dictionaries ------------------------------------------------
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
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)
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)
178--------------------------------------------------------------------------------
192--------------------------------------------------------------------------------
179-- (Closure . Process) as a not-quite-monad --
193-- (Closure . Process) as a not-quite-monad --
180--------------------------------------------------------------------------------
194--------------------------------------------------------------------------------