module Control.Monad.Par.Meta.Resources.SingleThreaded (
mkResource
, defaultStartup
, defaultWorkSearch
) where
import Control.Concurrent
import Control.Monad
import Text.Printf
import Control.Monad.Par.Meta
dbg :: Bool
#ifdef DEBUG
dbg = True
#else
dbg = True
#endif
mkResource :: Resource
mkResource = Resource defaultStartup defaultWorkSearch
defaultStartup :: Startup
defaultStartup = St st
where st ws _ = do
#if __GLASGOW_HASKELL__ >= 702
(cap, _) <- threadCapability =<< myThreadId
#else
let cap = 0
#endif
when dbg $ printf " [%d] spawning single worker\n" cap
spawnWorkerOnCPU ws cap >> return ()
defaultWorkSearch :: WorkSearch
defaultWorkSearch = WS ws
where ws _ _ = return Nothing