Я пытаюсь написать модуль, который анализирует xml из api, удаляет некоторую информацию и печатает результат как json, но я ударил икоту на этапе печати. Если я печатаю шоу, я действительно вижу, что есть правильные данные, однако вызов, который должен преобразовать записи в json, encode shows
, создает segfault.Зачем этот код создает segfault?
{-# LANGUAGE Arrows, NoMonomorphismRestriction, OverloadedStrings #-}
import Network.HTTP
import Text.XML.HXT.Core
import Data.Aeson
import qualified Data.ByteString.Lazy.Char8 as LazyByteString
openUrl :: String -> IO String
openUrl url = getResponseBody =<< simpleHTTP (getRequest url)
composeSearch :: String -> String
composeSearch query = "http://services.tvrage.com/feeds/search.php?show=" ++ urlEncode query
searchShow :: String -> IO String
searchShow query = openUrl $ composeSearch query
data TvShow = TvShow { showName, showId :: String } deriving (Show)
getShow = deep (isElem >>> hasName "show") >>>
proc x -> do
name <- getText <<< getChildren <<< deep (hasName "name") -< x
id <- getText <<< getChildren <<< deep (hasName "showid") -< x
returnA -< TvShow { showName = name, showId = id }
instance ToJSON TvShow where
toJSON (TvShow name id) = object ["name" .= name, "id" .= id]
main :: IO()
main = do
results <- searchShow "Always Sunny"
shows <- runX (readString [ withValidate no ] results >>> getShow)
putStrLn (LazyByteString.unpack (encode shows))
Edit: Как user1891025 указал, это может быть проблема с моей машины или пакет версий.
- система: Ubuntu 11.04 32bit
- эсон v0.6.1.0
- GHC v7.2.1
Этот вопрос становится повышение конкретных, так что я возьму его в ИРЦ, но если кто-нибудь имеет помощь, пожалуйста, дайте мне знать!
Это работает для меня. Вы можете опубликовать информацию о своей системе, версии пакета и сообщения об ошибках, если они существуют. – user1891025
Я думаю, что вы правы. Я пробовал опубликованный пример, который также использовал 'encode', но он также был прерван. Кажется, что Aeson (по-видимому) мне не нравится. :) –
Какие флаги вы используете для компиляции кода? Могут быть проблемы с, например, LLVM на вашем чипсете. –