J'essaie d'écrire un module qui analyse XML à partir d'une API, supprime certaines informations, et imprime le résultat en JSON, mais j'ai frappé un hoquet à l'étape de l'impression. Si j'imprime des spectacles je vois en effet que les données correctes sont là, cependant, l'appel qui devrait transformer les enregistrements en json, encode shows
, produit un segfault.Pourquoi ce code produirait-il un 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: Comme user1891025 a souligné, cela peut être un problème avec mes versions de la machine ou l'emballage.
- System: Ubuntu 11.04 32 bits
- Aeson v0.6.1.0
- GHC v7.2.1
Cette question devient de plus en plus spécifique, donc je vais le prendre à irc, mais si n'importe qui a de l'aide s'il vous plaît faites le moi savoir!
Ca marche pour moi. Vous pouvez publier vos informations système, les versions de package et les messages d'erreur s'ils existent. – user1891025
Je pense que vous avez raison. J'ai essayé un exemple posté qui utilisait aussi 'encoder 'mais aussi segfaulted. Aeson (vraisemblablement) semble ne pas aimer ma machine. :) –
Quels indicateurs utilisez-vous pour compiler le code? Pourrait être des problèmes avec, par exemple, le backend LLVM sur votre chipset. –