f# fparsec

f# - Cómo convertir un analizador FParsec para analizar el espacio en blanco



(1)

let whitespaceText = manyChars (anyOf whitespaceTextChars)

o

let whitespaceText = many (anyOf whitespaceTextChars) |>> fun cs -> System.String (Array.ofList cs)

Estoy implementando un analizador que trata los comentarios como espacios en blanco con FParsec. Parece que requiere una conversión de analizador trivial, pero todavía no sé cómo implementarlo.

Aquí está el código que intento obtener para verificar el tipo:

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)

El error está en el segundo argumento de ambos operadores <|> (sobre whitespaceText ). Los errores son -

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''

Parece que necesito convertir un Parser<char list, ''a> a un Parser<string, ''a> . O, como me estoy salteando, podría convertirlos a Parser<unit, ''a> . Sin embargo, no sé cómo escribir ese código. ¿Es una simple expresión lambda?

¡Aclamaciones!