priority-sync-0.2.1.0: PrioritySync/Internal/ClaimContext.hs
{-# LANGUAGE TypeFamilies #-}
module PrioritySync.Internal.ClaimContext
(ClaimContext(..))
where
import PrioritySync.Internal.UserData
import PrioritySync.Internal.RoomCore
import Control.Concurrent.STM
-- | Rules for calling 'claim_'.
class ClaimContext c where
type ClaimHandle c :: *
-- | Should approve a some claims before entering a critical section, as described by 'claim_'.
approveClaimsEntering :: c -> [Claim (UserData c)] -> STM (ClaimHandle c)
-- | Should approve a some claims before exiting a critical section, as described by 'claim_'.
approveClaimsExiting :: c -> [Claim (UserData c)] -> STM (ClaimHandle c)
-- | A waiting transaction, as described by 'claim_'.
waitingAction :: c -> ClaimHandle c -> STM ()
instance (ClaimContext c) => ClaimContext (c,m) where
type ClaimHandle (c,m) = ClaimHandle c
approveClaimsEntering = approveClaimsEntering . fst
approveClaimsExiting = approveClaimsExiting . fst
waitingAction = waitingAction . fst