{-# options_haddock prune #-}
module Polysemy.Conc.Effect.Mask where
data RestoreMask :: Effect where
Restore :: m a -> RestoreMask m a
makeSem_ ''RestoreMask
restore ::
∀ r a .
Member RestoreMask r =>
Sem r a ->
Sem r a
newtype Restoration =
Restoration { Restoration -> forall a. IO a -> IO a
unRestoration :: ∀ a . IO a -> IO a }
data MaskMode =
Interruptible
|
Uninterruptible
deriving stock (MaskMode -> MaskMode -> Bool
(MaskMode -> MaskMode -> Bool)
-> (MaskMode -> MaskMode -> Bool) -> Eq MaskMode
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
$c== :: MaskMode -> MaskMode -> Bool
== :: MaskMode -> MaskMode -> Bool
$c/= :: MaskMode -> MaskMode -> Bool
/= :: MaskMode -> MaskMode -> Bool
Eq, Int -> MaskMode -> ShowS
[MaskMode] -> ShowS
MaskMode -> String
(Int -> MaskMode -> ShowS)
-> (MaskMode -> String) -> ([MaskMode] -> ShowS) -> Show MaskMode
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
$cshowsPrec :: Int -> MaskMode -> ShowS
showsPrec :: Int -> MaskMode -> ShowS
$cshow :: MaskMode -> String
show :: MaskMode -> String
$cshowList :: [MaskMode] -> ShowS
showList :: [MaskMode] -> ShowS
Show)
type Mask =
Scoped MaskMode RestoreMask
type UninterruptibleMask = Mask
{-# deprecated UninterruptibleMask "Use Mask instead, which now handles both variants via MaskMode" #-}
mask ::
Member Mask r =>
InterpreterFor RestoreMask r
mask :: forall (r :: EffectRow).
Member Mask r =>
InterpreterFor RestoreMask r
mask =
MaskMode -> InterpreterFor RestoreMask r
forall param (effect :: Effect) (r :: EffectRow).
Member (Scoped param effect) r =>
param -> InterpreterFor effect r
scoped MaskMode
Interruptible
uninterruptibleMask ::
Member Mask r =>
InterpreterFor RestoreMask r
uninterruptibleMask :: forall (r :: EffectRow).
Member Mask r =>
InterpreterFor RestoreMask r
uninterruptibleMask =
MaskMode -> InterpreterFor RestoreMask r
forall param (effect :: Effect) (r :: EffectRow).
Member (Scoped param effect) r =>
param -> InterpreterFor effect r
scoped MaskMode
Uninterruptible