gpt4 book ai didi

json - 为Text.JSON的Result类型编写一个liftIO实例

转载 作者:行者123 更新时间:2023-12-01 01:05:45 25 4
gpt4 key购买 nike

Haskell的Text.JSON库使用一种称为Result的抽象数据类型,它基本上是Maybe的形式,但没有Nothing,而是Error String。任何人,我都需要使用liftIO将函数调用转换为在JSON.readJSON实现内部将IO事物返回到Result事物。我是monad变压器的新手,似乎无法实现Result的liftIO(根据ghci,我一直在尝试构造无限类型)。

有任何想法吗?

非常感谢

编辑

抱歉,我花了这么长时间才能详细说明!感谢您的帮助。

  readJSON (JSObject obj) = do text <- getVal obj "text"
user <- getVal obj "from_user"
iden <- getVal obj "id_str"
url <- (do if (length.extractURLs) text == 0
then return ""
else return $ head $ extractURLs text)
title <- liftIO (getSiteTitle url)
return $
Tweet
NewsStory {
title = "Twitter",
desc = text,
url = url,
metric = 0,
sourceURL = "twitter.com/" ++ user ++ "/status/" ++ iden
}


因此,返回之前的最后一行使用getSiteTitle解析该URL处的网站以获取其标题。但是,该函数返回IO String类型,编译器告诉我它希望它是Result。这不可能吗?

再次感谢!

编辑2

我决定从数据类型中删除标题,并稍后在IO monad中使用它。感谢大家的帮助!我当然已经从这个问题中学到了。

最佳答案

您不能在readJSON内使用IO(不能使用unsafePerformIO)。当您有一堆底部带有IO的monad变压器时,将使用liftIO。也许,如果您提供有关要实现的目标的更具体的信息,您将能够获得更有用的答案:)

关于json - 为Text.JSON的Result类型编写一个liftIO实例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4175589/

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