Skip to content

Instantly share code, notes, and snippets.

@ymdryo
Created February 8, 2024 06:12
Show Gist options
  • Save ymdryo/2f9254be614161e31636de3cfdb813a4 to your computer and use it in GitHub Desktop.
Save ymdryo/2f9254be614161e31636de3cfdb813a4 to your computer and use it in GitHub Desktop.
elaborateShift ::
(MonadFreer c fr, Union u, c (Eff u fr eh ef), HFunctor (u eh)) =>
Eff u fr (Shift ': eh) ef ~> Eff u fr eh ef
elaborateShift a =
a & interpretKAllH_ pure \k ->
(\(Shift f) -> elaborateShift $ f (raiseH . k))
|+: (k <=< injectH . hfmap elaborateShift)
data Shift m a where
Shift :: (forall (r :: Type). (a -> m r) -> m r) -> Shift m a
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment