Метод attoparsec `many` не найден

Я попытался запустить тесты для анализатора HTTP на основе Attoparsec Брайана О'Салливана ( http://www.serpentine.com/blog/2010/03/03/whats-in-a-parser-attoparsec-rewired-2/), и я получил эту ошибку:

> runhaskell TestRFC2616.hs

TestRFC2616.hs:13:30:
    Not in scope: `many'
    Perhaps you meant one of these:
      `any' (imported from Prelude),
      `B.any' (imported from Data.ByteString.Char8),
      many' (imported from Data.Attoparsec)

Удивленный, я запустил ghci и получил это:

> ghci
GHCi, version 7.6.3: http://www.haskell.org/ghc/  :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
Prelude> :m +Data.Attoparsec
Prelude Data.Attoparsec> :t many

<interactive>:1:1:
    Not in scope: `many'
    Perhaps you meant one of these:
      `any' (imported from Prelude),
      many' (imported from Data.Attoparsec),
      `many1' (imported from Data.Attoparsec)
Prelude Data.Attoparsec>

Кто-нибудь может сказать мне, что происходит?

1 ответ

Решение

Этому примеру 4 года. В версии 0.8.0 появилась реализация many в Data.Attoparsec.Combinator Модуль, вы можете проверить источник здесь.

Текущая версия библиотеки не реализует many функция, но она реализует many' функция (источник здесь). Вот почему ты ghci дать вам many' как предложение.

many это было реализовано в Data.Attoparsec.Combinator это то же самое, что реализовано в Control.Applicative (см. здесь реализацию many в Alternative тип класс). Вам, вероятно, нужно import Control.Applicative, Если это сработает, я бы посоветовал вам сделать запрос на удаление, чтобы решить эту проблему (хранилище библиотеки здесь)

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