Haskell の Text.JSON ライブラリは Result と呼ばれる抽象データ型を使用します。これは基本的には Maybe の形式ですが、Nothing の代わりに Error String があります。とにかく、JSON.readJSON の実装内で、liftIO を使用して、IO を返す関数呼び出しを 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
}
したがって、return の前の最後の行では、getSiteTitle を使用して、その URL の Web サイトのタイトルを解析します。ただし、その関数は IO String の型を返し、コンパイラはそれを Result にしたいと言います。これは不可能ですか?
再度、感謝します!
EDIT2
データ型からタイトルを削除し、後で IO モナド内で取得することにしました。みんなの助けに感謝します!私は確かにこの問題から学びました。