 Char
isHex = (lookAhead ∘ try) (spacing *> satisfy ((∧) <$> isHexDigit <*> not ∘ isUpper))

spacing ∷ Parser m ⇒ m String
spacing = many (oneOf [' ','\t'])

comment ∷ Parser m ⇒ m String
comment = spacing *> (string ";" <|> 
readLine ∷ Parser m ⇒ m [String]
readLine = takeWhile (not ∘ isComment) <$> some (klcValue <* spacing) <* emptyOrCommentLines
  where
    isComment (';':_) = True
    isComment ('/':'/':_) = True
    isComment _ = False
readLine = takeWhile (not ∘ isComment) <$> some (klcValue <* spacing) <* emptyOrCommentLines
  where
    isComment (';':_) = True
    isComment ('/':'/':_) = True
    isComment _ = False