{-# LANGUAGE TypeFamilies #-} module PrioritySync.Internal.Constrained (Constrained(..)) where import PrioritySync.Internal.UserData import PrioritySync.Internal.RoomGroup import PrioritySync.Internal.ClaimContext import PrioritySync.Internal.Room import PrioritySync.Internal.RoomConstraint -- | Require that all 'RoomConstraint's be satisfied when acquiring a 'Room'. data Constrained u = Constrained type instance UserData (Constrained u) = u instance RoomGroup (Constrained u) where roomsOf = const [] instance (RoomConstraint u) => ClaimContext (Constrained u) where type ClaimHandle (Constrained u) = () approveClaimsEntering _ cs = approveClaims cs >> return () approveClaimsExiting _ cs = approveClaims cs >> return () waitingAction _ () = return ()