@@ -1,9 +1,11 @@
1+{-# LANGUAGE CPP #-}
12{-# LANGUAGE DeriveDataTypeable #-}
3+{-# LANGUAGE DeriveGeneric #-}
24{-# LANGUAGE ExistentialQuantification #-}
35{-# LANGUAGE GeneralizedNewtypeDeriving #-}
46{-# LANGUAGE GADTs #-}
5−{-# LANGUAGE DeriveGeneric #-}
6−{-# LANGUAGE CPP #-}
7+{-# LANGUAGE MultiParamTypeClasses #-}
8+{-# LANGUAGE TypeFamilies #-}
79
810-- | Types used throughout the Cloud Haskell framework
911--
@@ -116,7 +118,9 @@ import qualified Network.Transport as NT (EndPoint, EndPointAddress, Connection)
116118import Control.Applicative (Applicative, Alternative, (<$>), (<*>))
117119import Control.Monad.Fix (MonadFix)
118120import Control.Monad.Reader (MonadReader(..), ReaderT, runReaderT)
119−import Control.Monad.IO.Class (MonadIO)
121+import Control.Monad.IO.Class (MonadIO(..))
122+import Control.Monad.Base (MonadBase(..))
123+import Control.Monad.Trans.Control (MonadBaseControl(..))
120124import Control.Distributed.Process.Serializable
121125 ( Fingerprint
122126 , Serializable
@@ -345,7 +349,21 @@ data LocalProcessState = LocalProcessState
345349newtype Process a = Process {
346350 unProcess :: ReaderT LocalProcess IO a
347351 }
348− deriving (Functor, Monad, MonadIO, MonadReader LocalProcess, Typeable, Applicative, MonadFix)
352+ deriving ( Applicative, Functor, Monad, MonadFix, MonadIO
353+ , MonadReader LocalProcess, Typeable
354+ )
355+
356+instance MonadBase IO Process where
357+ liftBase = liftIO
358+
359+instance MonadBaseControl IO Process where
360+ newtype StM Process a =
361+ StMProcess { unStMProcess :: StM (ReaderT LocalProcess IO) a }
362+
363+ liftBaseWith f = Process $ liftBaseWith $ \run ->
364+ f $ fmap StMProcess . run . unProcess
365+
366+ restoreM = Process . restoreM . unStMProcess
349367
350368--------------------------------------------------------------------------------
351369-- Typed channels --