@@ -16,6 +16,7 @@ module Effectful.Concurrent.Base
16 , forkOnWithUnmask
16 , forkOnWithUnmask
17 , getNumCapabilities
17 , getNumCapabilities
18 , setNumCapabilities
18 , setNumCapabilities
19 , threadCapability
20 , threadCapability
21 -- * Scheduling
22 -- * Scheduling
@@ -42,12 +43,13 @@ module Effectful.Concurrent.Base
42 , C.rtsSupportsBoundThreads
43 , C.rtsSupportsBoundThreads
45−import qualified Control.Concurrent as C
46import Control.Exception (Exception, SomeException)
46import Control.Exception (Exception, SomeException)
47import Data.Bifunctor (second)
47import Data.Bifunctor (second)
48import System.Mem.Weak (Weak)
48import System.Mem.Weak (Weak)
49import System.Posix.Types (Fd)
49import System.Posix.Types (Fd)
50import UnliftIO.STM (STM)
50import UnliftIO.STM (STM)
51+import qualified Control.Concurrent as C
52+import qualified GHC.Conc as GHC
52import Effectful.Concurrent.Internal
54import Effectful.Concurrent.Internal
53import Effectful.Internal.Effect
55import Effectful.Internal.Effect
@@ -122,6 +124,10 @@ getNumCapabilities = unsafeEff_ C.getNumCapabilities
122setNumCapabilities :: Concurrent :> es => Int -> Eff es ()
124setNumCapabilities :: Concurrent :> es => Int -> Eff es ()
123setNumCapabilities = unsafeEff_ . C.setNumCapabilities
125setNumCapabilities = unsafeEff_ . C.setNumCapabilities
127+-- | Lifted 'GHC.getNumProcessors'.
128+getNumProcessors :: Concurrent :> es => Eff es Int
129+getNumProcessors = unsafeEff_ GHC.getNumProcessors
125-- | Lifted 'C.threadCapability'.
131-- | Lifted 'C.threadCapability'.
126threadCapability :: Concurrent :> es => C.ThreadId -> Eff es (Int, Bool)
132threadCapability :: Concurrent :> es => C.ThreadId -> Eff es (Int, Bool)
127threadCapability = unsafeEff_ . C.threadCapability
133threadCapability = unsafeEff_ . C.threadCapability