{-# LANGUAGE TypeFamilies, UndecidableInstances #-} module PrioritySync.Internal.RoomGroup (RoomGroup(..)) where import PrioritySync.Internal.UserData import PrioritySync.Internal.RoomCore class RoomGroup m where roomsOf :: m -> [Room (UserData m)] instance RoomGroup (Room u) where roomsOf m = [m] instance (RoomGroup rs) => RoomGroup [rs] where roomsOf = concatMap roomsOf instance (UserData c ~ UserData m,RoomGroup c,RoomGroup m) => RoomGroup (c,m) where roomsOf (c,m) = roomsOf c ++ roomsOf m