ompoundSelector :: Parser CompoundSelector
compoundSelector = cs1 <|> cs2
  where cs1 = do
            sel  <- typeSelector <|> universal
            sels <- many p
            pure $ sel:|sels
        cs2 = (Universal mempty :|) <$> some p
        p = idSel <|> classSel <|> attributeSel <|> pseudo

-- | Parses a \"number sign\" (U+0023, \#) immediately followed by the ID value,
-- which must be a CSS identifier.

compoundSelector :: Parser CompoundSelector
compoundSelector = cs1 <|> cs2
  where cs1 = do
            sel  <- typeSelector <|> universal
            sels <- many p
            pure $ sel:|sels
        cs2 = (Universal mempty :|) <$> some p
        p = idSel <|> classSel <|> attributeSel <|> pseudo

-- | Parses a \"number sign\" (U+0023, \#) immediately followed by the ID value,
-- which must be a CSS identifier.
compoundSelector = cs1 <|> cs2
  where cs1 = do
            sel  <- typeSelector <|> universal
            sels <- many p
            pure $ sel:|sels
        cs2 = (Universal mempty :|) <$> some p
        p = idSel <|> classSel <|> attributeSel <|> pseudo

-- | Parses a \"number sign\" (U+0023, \#) immediately followed by the ID value,
-- which must be a CSS identifier.