Разрешение типа в Haskell: MegaParsec/ Парсинг одного пробела
Если я посмотрю на документацию дляspace
предлагает использовать void spaceChar
,
Однако, если я действительно попробую:
x :: Parser ()
x = void spaceChar
я получил
* Couldn't match type `Token s0' with `Char'
arising from a use of `spaceChar'
The type variable `s0' is ambiguous
* In the first argument of `void', namely `spaceChar'
In the expression: void spaceChar
In an equation for `x': x = void spaceChar
Я думаю, что выражение правильное, но мне нужно кое-что сделать, чтобы убедить проверку типов. Как мне заставить это работать?
2 ответа
Решение
Я разыскал проблему, пытаясь создать репродукцию. Проблема была немного заумной: я не импортировал Control.Monad. Вместо этого, похоже, что void был обнаружен где-то еще (не уверен, где), и это определение void привело к возникновению этой ошибки. Спасибо всем, кто пытался помочь.
GHCI предлагает тип (Token s ~ Char, MonadParsec e s f) => f ()
, Это должно работать. Откуда вы взяли имя Parser
?