С 1_:
lexeme p = do { x <- p; whiteSpace; return x }
Похоже, что лексема берет синтаксический анализатор p и предоставляет синтаксический анализатор, который имеет то же поведение, что и p, за исключением того, что он также пропускает все конечные пробелы. Верный?
Тогда почему не работает следующее:
constant :: Parser Int
constant = do
digits <- many1 digit
return (read digits)
lexConst :: Parser Int
lexConst = lexeme constant
Последняя строка приводит к следующему сообщению об ошибке:
Couldn't match expected type `ParsecT
String () Data.Functor.Identity.Identity Int'
with actual type `ParsecT s0 u0 m0 a0 -> ParsecT s0 u0 m0 a0'
Expected type: Parser Int
Actual type: ParsecT s0 u0 m0 a0 -> ParsecT s0 u0 m0 a0
In the return type of a call of `lexeme'
In the expression: lexeme constant
Что я делаю не так?