module Math.SetCover.Queue (SetId(..), Methods(..)) where import Data.EnumMap (EnumMap) import Data.EnumSet (EnumSet) newtype SetId = SetId Int instance Enum SetId where fromEnum (SetId n) = n toEnum = SetId data Methods queue set = Methods { fromEnumMap :: EnumMap SetId set -> queue, partition :: queue -> set -> (EnumSet SetId, queue), difference :: queue -> EnumMap SetId set -> queue, findMin :: queue -> Maybe (EnumSet SetId), null :: queue -> Bool }