on master help sign in
Add a few INLINE pragmas for better performance
7975895Andrzej Rybczak
src/Effectful/Internal/Env.hs+1
@@ -444,6 +444,7 @@ getLocation (Env fork ref _) = do
444
444
445 ix :: Int -> Int
445 ix :: Int -> Int
446 ix n = n - reifyIndex @e @es - 1
446 ix n = n - reifyIndex @e @es - 1
447+{-# INLINE getLocation #-}
447
448
448toAny :: a -> Any
449toAny :: a -> Any
449toAny = unsafeCoerce
450toAny = unsafeCoerce
src/Effectful/Internal/Monad.hs+6
@@ -160,24 +160,30 @@ execEffect e0 (Eff m) = unsafeEff $ \es0 -> do
160
160
161getEffect :: e :> es => Eff es (i e)
161getEffect :: e :> es => Eff es (i e)
162getEffect = unsafeEff $ \es -> getEnv es
162getEffect = unsafeEff $ \es -> getEnv es
163+{-# INLINE getEffect #-}
163
164
164putEffect :: e :> es => i e -> Eff es ()
165putEffect :: e :> es => i e -> Eff es ()
165putEffect e = unsafeEff $ \es -> unsafePutEnv e es
166putEffect e = unsafeEff $ \es -> unsafePutEnv e es
167+{-# INLINE putEffect #-}
166
168
167stateEffect :: e :> es => (i e -> (a, i e)) -> Eff es a
169stateEffect :: e :> es => (i e -> (a, i e)) -> Eff es a
168stateEffect f = unsafeEff $ \es -> unsafeStateEnv f es
170stateEffect f = unsafeEff $ \es -> unsafeStateEnv f es
171+{-# INLINE stateEffect #-}
169
172
170localEffect :: e :> es => (i e -> i e) -> Eff es a -> Eff es a
173localEffect :: e :> es => (i e -> i e) -> Eff es a -> Eff es a
171localEffect f (Eff m) = unsafeEff $ \es -> do
174localEffect f (Eff m) = unsafeEff $ \es -> do
172 bracket (unsafeStateEnv (\e -> (e, f e)) es)
175 bracket (unsafeStateEnv (\e -> (e, f e)) es)
173 (\e -> unsafePutEnv e es)
176 (\e -> unsafePutEnv e es)
174 (\_ -> m es)
177 (\_ -> m es)
178+{-# INLINE localEffect #-}
175
179
176readerEffectM :: e :> es => (i e -> Eff es a) -> Eff es a
180readerEffectM :: e :> es => (i e -> Eff es a) -> Eff es a
177readerEffectM f = unsafeEff $ \es -> getEnv es >>= \e -> unEff (f e) es
181readerEffectM f = unsafeEff $ \es -> getEnv es >>= \e -> unEff (f e) es
182+{-# INLINE readerEffectM #-}
178
183
179stateEffectM :: e :> es => (i e -> Eff es (a, i e)) -> Eff es a
184stateEffectM :: e :> es => (i e -> Eff es (a, i e)) -> Eff es a
180stateEffectM f = unsafeEff $ \es -> do
185stateEffectM f = unsafeEff $ \es -> do
181 (a, e) <- (\e -> unEff (f e) es) =<< getEnv es
186 (a, e) <- (\e -> unEff (f e) es) =<< getEnv es
182 unsafePutEnv e es
187 unsafePutEnv e es
183 pure a
188 pure a
189+{-# INLINE stateEffectM #-}