packages feed

polysemy-conc-0.6.0.1: 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.Mask (Mask, UninterruptibleMask)
import Polysemy.Conc.Effect.Race (Race)
import Polysemy.Conc.Interpreter.Mask (Restoration, interpretMaskFinal, interpretUninterruptibleMaskFinal)
import Polysemy.Conc.Interpreter.Race (interpretRace)

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

-- |Interprets 'UninterruptibleMask', '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 .
  interpretMaskFinal .
  interpretUninterruptibleMaskFinal