packages feed

polysemy-conc-0.15.0.0: lib/Polysemy/Conc/Interpreter/Stack.hs

{-# options_haddock prune #-}

-- | Description: Convenience Interpreters for all Conc Effects, Internal
module Polysemy.Conc.Interpreter.Stack where

import Polysemy.Conc.Effect.Gate (Gates)
import Polysemy.Conc.Effect.Mask (Mask)
import Polysemy.Conc.Effect.Race (Race)
import Polysemy.Conc.Interpreter.Gate (interpretGates)
import Polysemy.Conc.Interpreter.Mask (interpretMaskFinal)
import Polysemy.Conc.Interpreter.Race (interpretRace)

-- | A default basic stack with 'Final' for _polysemy-conc_.
type ConcStack =
  [
    Mask,
    Gates,
    Race,
    Async,
    Resource,
    Embed IO,
    Final IO
  ]

-- | Interprets 'Mask' and 'Race' in terms of @'Final' 'IO'@ and runs the entire rest of the
-- stack.
runConc ::
  Sem ConcStack a ->
  IO a
runConc =
  runFinal .
  embedToFinal @IO .
  resourceToIOFinal .
  asyncToIOFinal .
  interpretRace .
  interpretGates .
  interpretMaskFinal