Я реализую синтаксический анализатор, который обрабатывает комментарии как пробелы в FParsec Кажется, что это требует тривиального преобразования парсера, но я пока не знаю, как это реализовать.
Вот код, который я пытаюсь получить для проверки типов -
let whitespaceTextChars = " \t\r\n"
/// Read whitespace characters.
let whitespaceText = many (anyOf whitespaceTextChars)
/// Read a line comment.
let lineComment = pchar lineCommentChar >>. restOfLine true
/// Skip any white space characters.
let skipWhitespace = skipMany (lineComment <|> whitespaceText)
/// Skip at least one white space character.
let skipWhitespace1 = skipMany1 (lineComment <|> whitespaceText)
Ошибка на втором аргументе обоих операторов <|>
(более whitespaceText
). Ошибки -
Error 1 Type mismatch. Expecting a Parser<string,'a> but given a Parser<char list,'a> The type 'string' does not match the type 'char list'
Error 2 Type mismatch. Expecting a Parser<string,'a> but given a Parser<char list,'a> The type 'string' does not match the type 'char list'
Кажется, мне нужно преобразовать Parser<char list, 'a>
в Parser<string, 'a>
. Или, поскольку я просто их пропускаю, я могу преобразовать их в Parser<unit, 'a>
. Однако я не знаю, как написать этот код. Это простое лямбда-выражение?
ура!