@@ -16,6 +16,7 @@ module Effectful.Concurrent.Base
1616 , forkOnWithUnmask
1717 , getNumCapabilities
1818 , setNumCapabilities
19+ , getNumProcessors
1920 , threadCapability
2021
2122 -- * Scheduling
@@ -42,12 +43,13 @@ module Effectful.Concurrent.Base
4243 , C.rtsSupportsBoundThreads
4344 ) where
4445
45−import qualified Control.Concurrent as C
4646import Control.Exception (Exception, SomeException)
4747import Data.Bifunctor (second)
4848import System.Mem.Weak (Weak)
4949import System.Posix.Types (Fd)
5050import UnliftIO.STM (STM)
51+import qualified Control.Concurrent as C
52+import qualified GHC.Conc as GHC
5153
5254import Effectful.Concurrent.Internal
5355import Effectful.Internal.Effect
@@ -122,6 +124,10 @@ getNumCapabilities = unsafeEff_ C.getNumCapabilities
122124setNumCapabilities :: Concurrent :> es => Int -> Eff es ()
123125setNumCapabilities = unsafeEff_ . C.setNumCapabilities
124126
127+-- | Lifted 'GHC.getNumProcessors'.
128+getNumProcessors :: Concurrent :> es => Eff es Int
129+getNumProcessors = unsafeEff_ GHC.getNumProcessors
130+
125131-- | Lifted 'C.threadCapability'.
126132threadCapability :: Concurrent :> es => C.ThreadId -> Eff es (Int, Bool)
127133threadCapability = unsafeEff_ . C.threadCapability