-- |Interpretation combinators.
-- Internal.
module Helic.Interpreter where

import Polysemy.Internal.CustomErrors (FirstOrder)

-- |Flipped version of 'interpret'.
interpreting ::
   e r a .
  FirstOrder e "interpret" =>
  Sem (e : r) a ->
  ( r0 x . e (Sem r0) x -> Sem r x) ->
  Sem r a
interpreting :: Sem (e : r) a
-> (forall (r0 :: EffectRow) x. e (Sem r0) x -> Sem r x) -> Sem r a
interpreting Sem (e : r) a
s forall (r0 :: EffectRow) x. e (Sem r0) x -> Sem r x
h =
  (forall (r0 :: EffectRow) x. e (Sem r0) x -> Sem r x)
-> Sem (e : r) a -> Sem r a
forall (e :: Effect) (r :: EffectRow) a.
FirstOrder e "interpret" =>
(forall (rInitial :: EffectRow) x. e (Sem rInitial) x -> Sem r x)
-> Sem (e : r) a -> Sem r a
interpret forall (r0 :: EffectRow) x. e (Sem r0) x -> Sem r x
h Sem (e : r) a
s
{-# inline interpreting #-}