pTemplateValue :: (Bounded a, Enum a) =>
    CharParser () a -> CharParser () (PatternValue a)
pTemplateValue p =
    Any <$ char '*' <|>
    maybe Any OneOf <$> optionMaybe oneOrManyV
    where
        oneV = (: []) <$> p
        manyV = "pattern" <??> char '[' *> sepBy1 p (char ',') <* char ']'
        oneOrManyV = manyV <|> oneV
pTemplateValue :: (Bounded a, Enum a) =>
    CharParser () a -> CharParser () (PatternValue a)
pTemplateValue p =
    Any <$ char '*' <|>
    maybe Any OneOf <$> optionMaybe oneOrManyV
    where
        oneV = (: []) <$> p
        manyV = "pattern" <??> char '[' *> sepBy1 p (char ',') <* char ']'
        oneOrManyV = manyV <|> oneV
pTemplateValue p =
    Any <$ char '*' <|>
    maybe Any OneOf <$> optionMaybe oneOrManyV
    where
        oneV = (: []) <$> p
        manyV = "pattern" <??> char '[' *> sepBy1 p (char ',') <* char ']'
        oneOrManyV = manyV <|> oneV