Разрешение типа в 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?

Другие вопросы по тегам