Может ли кто-нибудь осветить, что на самом деле происходит за этой ошибкой экземпляра?

#haskell #types

#haskell #типы

Вопрос:

Я получаю эту ошибку в ghci, и я подозреваю, что ошибка не выражает реальную проблему.

 No instances for (Control.Monad.IO.Class.MonadIO
                    GHC.Prim.Any(* -> *),
                  Failure HttpException GHC.Prim.Any(* -> *))
  arising from a use of `httpLbsRedirect'
Possible fix:
  add instance declarations for
  (Control.Monad.IO.Class.MonadIO GHC.Prim.Any(* -> *),
   Failure HttpException GHC.Prim.Any(* -> *))
In the expression: httpLbsRedirect test nManager
In an equation for `it': it = httpLbsRedirect test nManager
  

Вот что я делаю в ghci, чтобы решить эту проблему. Сначала я загружаю файл, содержащий некоторые импортные файлы, с которыми я хочу поиграть.Http-Enumerator является включенным, имеющим отношение к этой проблеме. Затем я делаю это:

 nManager <- newManager
test <- parseUrl "https://pkg.cudaops.com/cgi-bin/qaLinkEditor.cgi?json=1"
:t test :: Request GHC.Prim.Any(* -> *)

ghcifoo> httpLbsRedirect test nManager

<interactive>:1:1:
No instances for (Control.Monad.IO.Class.MonadIO
                    GHC.Prim.Any(* -> *),
                  Failure HttpException GHC.Prim.Any(* -> *))
  arising from a use of `httpLbsRedirect'
Possible fix:
  add instance declarations for
  (Control.Monad.IO.Class.MonadIO GHC.Prim.Any(* -> *),
   Failure HttpException GHC.Prim.Any(* -> *))
In the expression: httpLbsRedirect test nManager
In an equation for `it': it = httpLbsRedirect test nManager
  

Когда я пытаюсь добавить экземпляр, который он говорит, что хочет, я получаю ошибки синтаксического анализа (* -> *). Это заставляет меня думать, что проблема кроется в другом. Не уверен, что делать. Освещение приветствуется.

Комментарии:

1. Какой пакет предоставляет импортируемый модуль? Какой модуль вы импортируете?

2. Я импортирую Network.HTTP.Enumerator, предоставляемый пакетом Http-Enumerator.

Ответ №1:

Ответ пришел от #haskell на freenode, от Twey.

Вы должны указать тип, возвращаемый parseUrl . Правильное использование было бы:

test <- (parseUrl «https://pkg.cudaops.com/cgi-bin/qaLinkEditor.cgi?json=1 «) :: (Ввод-вывод (Запрос ввода-вывода))

Комментарии:

1. В качестве альтернативы, вы можете поместить весь do-блок между:{ и :} в GHCi — тогда вывод типа может определить правильные типы.

2. Я почти понял это правильно, просто прочитав документы. Моя попытка была (запрос ввода-вывода). Когда это не сработало, я не знал достаточно, чтобы понять, что я был близок.