sym2enum :: [String] -> [a] -> Parser a
sym2enum ss es = choice ps
  where
    func res sym = do {reserved res; return sym}
    ps = zipWith func ss es
sym2enum :: [String] -> [a] -> Parser a
sym2enum ss es = choice ps
  where
    func res sym = do {reserved res; return sym}
    ps = zipWith func ss es
sym2enum ss es = choice ps
  where
    func res sym = do {reserved res; return sym}
    ps = zipWith func ss es