3
我想寫一個模塊,從api分析xml,去掉一些信息,並將結果打印爲json,但是我在打印步驟中遇到了一個呃逆。如果我打印節目,我確實看到正確的數據在那裏,但是,將記錄轉換成json,encode shows
的調用會產生段錯誤。這段代碼爲什麼會產生段錯誤?
{-# 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))
編輯:作爲user1891025指出,這可能是與我的機器或包版本的問題。
- 操作系統:Ubuntu 11.04 32位
- 埃宋v0.6.1.0
- GHC v7.2.1
這個問題越來越具體越來越多,所以我將它帶到體育館,但如果任何人有任何幫助,請讓我知道!
它適合我。您可能想要發佈系統信息,軟件包版本和錯誤消息(如果存在)。 – user1891025
我認爲你是對的。我已經嘗試過使用'encode'的發佈示例,但它也被隔離了。艾森(大概)似乎不喜歡我的機器。 :) –
你使用什麼標誌來編譯代碼?可能是與例如芯片組上的LLVM後端。 –