on master help sign in
Add getNumProcessors
830a7adAndrzej Rybczak
effectful/src/Effectful/Concurrent/Base.hs+7−1
@@ -16,6 +16,7 @@ module Effectful.Concurrent.Base
16 , forkOnWithUnmask
16 , forkOnWithUnmask
17 , getNumCapabilities
17 , getNumCapabilities
18 , setNumCapabilities
18 , setNumCapabilities
19+ , getNumProcessors
19 , threadCapability
20 , threadCapability
20
21
21 -- * Scheduling
22 -- * Scheduling
@@ -42,12 +43,13 @@ module Effectful.Concurrent.Base
42 , C.rtsSupportsBoundThreads
43 , C.rtsSupportsBoundThreads
43 ) where
44 ) where
44
45
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
51
53
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
124
126
127+-- | Lifted 'GHC.getNumProcessors'.
128+getNumProcessors :: Concurrent :> es => Eff es Int
129+getNumProcessors = unsafeEff_ GHC.getNumProcessors
130+
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