Haskell JSON Issue

Пытался заставить этот код работать, но компилятор выдает ошибку?

 {-# LANGUAGE OverloadedStrings, DeriveGeneric #-}

 import Data.Aeson
 import Data.Text
 import Control.Applicative
 import Control.Monad
 import qualified Data.ByteString.Lazy as B
 import Network.HTTP.Conduit (simpleHttp)
 import GHC.Generics


data Temperatures =
Temperatures { date  :: String
     , temperature   :: Int
     } deriving (Show,Generic)


instance FromJSON Temperatures
instance ToJSON Temperatures

jsonURL :: String
jsonURL = "A JSON URL"

getJSON :: IO B.ByteString
getJSON = simpleHttp jsonURL

main :: IO ()
main = do
d <- (eitherDecode <$> getJSON) :: IO (Either String [Temperatures])
case d of
Left err -> putStrLn err
Right ps -> print ps

И сообщение об ошибке я получаю это

Main.hs:25:11:
Couldn't match type `bytestring-      0.10.0.2:Data.ByteString.Lazy.Internal.ByteString'
              with `B.ByteString'
Expected type: IO B.ByteString
  Actual type: IO
                 bytestring-0.10.0.2:Data.ByteString.Lazy.Internal.ByteString
In the return type of a call of `simpleHttp'
In the expression: simpleHttp jsonURL
In an equation for `getJSON': getJSON = simpleHttp jsonURL

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

2 ответа

Похоже, что установлено несколько версий пакета bytestring. Вы можете использовать следующую команду для поиска пакетов bytestring:

ghc-pkg list bytestring

Если установлено более одного, проблема может быть решена следующим образом:

ghc-pkg отменить регистрацию

Или же,

сборка с помощью ghc --make --hide-package

Ах. Это известно как Кабал Ад. Исправление этого - активная область исследования в сообществе Haskell. Мои предложения будут следующими:

  • Если вы используете Windows:

    • Установить MinGHC
    • Установите Stackage (Стабильный Hackage). Вы можете сделать это глобально или для каждого проекта. Вот глобальный путь:
    • Загрузите глобальный файл cabal.config.
    • Теперь откройте ваш глобальный конфигурационный файл cabal. Моя была в C:\Users\blauwers\AppData\Roaming\cabal и был только что назван config,
    • Скопируйте и вставьте содержимое файла, который вы скачали, в конец этого файла.
    • Теперь ваша глобальная кабальная среда попытается получить пакеты от Stackage.
    • Для большей безопасности закомментируйте другие строки в файле, начинающиеся с remote-repo, В моем случае это было только remote-repo: hackage.haskell.org:http://hackage.haskell.org/packages/archive,
    • При включенной дополнительной безопасности вам придется вручную загружать и устанавливать пакеты, которых нет в Stackage.
  • Если вы используете Linux: я не знаю, где находится глобальный конфигурационный файл cabal, но процесс тот же.

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