module PrioritySync.Internal.Receipt
(Receipt(..))
where
import PrioritySync.Internal.UserData
import PrioritySync.Internal.RoomGroup
import PrioritySync.Internal.ClaimContext
import Control.Concurrent.STM
data Receipt c = Receipt {
receipt_base_context :: c,
receipt_entering_callback, receipt_exiting_callback :: ClaimHandle c -> STM () }
type instance UserData (Receipt c) = UserData c
instance (RoomGroup c) => RoomGroup (Receipt c) where
roomsOf r = roomsOf $ receipt_base_context r
instance (ClaimContext c) => ClaimContext (Receipt c) where
type ClaimHandle (Receipt c) = ClaimHandle c
approveClaimsEntering r cs =
do result <- approveClaimsEntering (receipt_base_context r) cs
receipt_entering_callback r $ result
return result
approveClaimsExiting r cs =
do result <- approveClaimsExiting (receipt_base_context r) cs
receipt_exiting_callback r $ result
return result
waitingAction r = waitingAction $ receipt_base_context r