@@ -367,7 +367,9 @@ type EffectHandler e es
367 -- ^ The effect performed in the local environment.
367 -- ^ The effect performed in the local environment.
368 -> Eff es a
368 -> Eff es a
370+-- | An adapter for dynamically dispatched effects.
370−-- | An effect handler bundled along with its environment.
372+-- Represents the effect handler bundled along with its environment.
371data Handler :: Effect -> Type where
373data Handler :: Effect -> Type where
372 Handler :: !(Env es) -> !(EffectHandler e es) -> Handler e
374 Handler :: !(Env es) -> !(EffectHandler e es) -> Handler e
@@ -387,49 +389,49 @@ runHandler e m = unsafeEff $ \es0 -> do
387-- | Send an operation of the given effect to its handler for execution.
389-- | Send an operation of the given effect to its handler for execution.
388send :: (HasCallStack, e :> es) => e (Eff es) a -> Eff es a
390send :: (HasCallStack, e :> es) => e (Eff es) a -> Eff es a
389send op = unsafeEff $ \es -> do
391send op = unsafeEff $ \es -> do
390− Handler env handle <- getEnv es
392+ Handler handlerEs handle <- getEnv es
391− unEff (handle (LocalEnv es) op) env
393+ unEff (handle (LocalEnv es) op) handlerEs
393----------------------------------------
395----------------------------------------
394-- Helpers
396-- Helpers
396−runEffect :: handler e -> Eff (e : es) a -> Eff es (a, handler e)
398+runEffect :: adapter e -> Eff (e : es) a -> Eff es (a, adapter e)
397runEffect e0 m = unsafeEff $ \es0 -> do
399runEffect e0 m = unsafeEff $ \es0 -> do
398 size0 <- sizeEnv es0
400 size0 <- sizeEnv es0
399 E.bracket (unsafeConsEnv e0 noRelinker es0)
401 E.bracket (unsafeConsEnv e0 noRelinker es0)
400 (unsafeTailEnv size0)
402 (unsafeTailEnv size0)
401 (\es -> (,) <$> unEff m es <*> getEnv es)
403 (\es -> (,) <$> unEff m es <*> getEnv es)
403−evalEffect :: handler e -> Eff (e : es) a -> Eff es a
405+evalEffect :: adapter e -> Eff (e : es) a -> Eff es a
404evalEffect e m = unsafeEff $ \es0 -> do
406evalEffect e m = unsafeEff $ \es0 -> do
405 size0 <- sizeEnv es0
407 size0 <- sizeEnv es0
406 E.bracket (unsafeConsEnv e noRelinker es0)
408 E.bracket (unsafeConsEnv e noRelinker es0)
407 (unsafeTailEnv size0)
409 (unsafeTailEnv size0)
408 (\es -> unEff m es)
410 (\es -> unEff m es)
410−execEffect :: handler e -> Eff (e : es) a -> Eff es (handler e)
412+execEffect :: adapter e -> Eff (e : es) a -> Eff es (adapter e)
411execEffect e0 m = unsafeEff $ \es0 -> do
413execEffect e0 m = unsafeEff $ \es0 -> do
412 size0 <- sizeEnv es0
414 size0 <- sizeEnv es0
413 E.bracket (unsafeConsEnv e0 noRelinker es0)
415 E.bracket (unsafeConsEnv e0 noRelinker es0)
414 (unsafeTailEnv size0)
416 (unsafeTailEnv size0)
415 (\es -> unEff m es *> getEnv es)
417 (\es -> unEff m es *> getEnv es)
417−getEffect :: e :> es => Eff es (handler e)
419+getEffect :: e :> es => Eff es (adapter e)
418getEffect = unsafeEff $ \es -> getEnv es
420getEffect = unsafeEff $ \es -> getEnv es
420−putEffect :: e :> es => handler e -> Eff es ()
422+putEffect :: e :> es => adapter e -> Eff es ()
421putEffect e = unsafeEff $ \es -> putEnv es e
423putEffect e = unsafeEff $ \es -> putEnv es e
423−stateEffect :: e :> es => (handler e -> (a, handler e)) -> Eff es a
425+stateEffect :: e :> es => (adapter e -> (a, adapter e)) -> Eff es a
424stateEffect f = unsafeEff $ \es -> stateEnv es f
426stateEffect f = unsafeEff $ \es -> stateEnv es f
426−stateEffectM :: e :> es => (handler e -> Eff es (a, handler e)) -> Eff es a
428+stateEffectM :: e :> es => (adapter e -> Eff es (a, adapter e)) -> Eff es a
427stateEffectM f = unsafeEff $ \es -> E.mask $ \release -> do
429stateEffectM f = unsafeEff $ \es -> E.mask $ \release -> do
428 (a, e) <- (\e -> release $ unEff (f e) es) =<< getEnv es
430 (a, e) <- (\e -> release $ unEff (f e) es) =<< getEnv es
429 putEnv es e
431 putEnv es e
432−localEffect :: e :> es => (handler e -> handler e) -> Eff es a -> Eff es a
434+localEffect :: e :> es => (adapter e -> adapter e) -> Eff es a -> Eff es a
433localEffect f m = unsafeEff $ \es -> do
435localEffect f m = unsafeEff $ \es -> do
434 E.bracket (stateEnv es $ \e -> (e, f e))
436 E.bracket (stateEnv es $ \e -> (e, f e))
435 (\e -> putEnv es e)
437 (\e -> putEnv es e)