gpt4 book ai didi

xml - 为什么这段代码会产生段错误?

转载 作者:数据小太阳 更新时间:2023-10-29 02:45:49 25 4
gpt4 key购买 nike

我正在尝试编写一个模块来解析来自 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

这个问题越来越具体,所以我会把它带到 irc,但如果有人有任何帮助,请告诉我!

最佳答案

Aeson 的encode 函数调用Data.Text 包中的encodeUtf8。该函数使用 unsafeDupablePerformIO 和其他不安全的函数来检查内存。这可能是发生段错误的地方。

查看代码here .

关于xml - 为什么这段代码会产生段错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14027550/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com