{-# LANGUAGE TypeFamilies #-}
module PrioritySync.Internal.Unconstrained
    (Unconstrained(..))
    where

import PrioritySync.Internal.UserData
import PrioritySync.Internal.RoomGroup
import PrioritySync.Internal.ClaimContext
import PrioritySync.Internal.Room

-- | Don't check any 'RoomConstraint's when acquiring a 'Room'.
data Unconstrained u = Unconstrained

type instance UserData (Unconstrained u) = u

instance RoomGroup (Unconstrained u) where
    roomsOf = const []

instance ClaimContext (Unconstrained u) where
    type ClaimHandle (Unconstrained u) = ()
    approveClaimsEntering _ cs = mapM_ approve cs >> return ()
    approveClaimsExiting _ cs = mapM_ approve cs >> return ()
    waitingAction _ _ = return ()