我是一名新手 Haskell 程序员,我正在尝试编写一些 Haskell cgi,它将从 MySQL DB 读取并输出 JSON。我能够生成正确的 JSON,但无法正确获取数据类型以便能够正确输出 JSON。我也认为我主要还是在考虑必要性。这是我的代码。请注意,getTopBrands 提供 json 输出。
我的问题是我无法弄清楚如何从 getTopBrands 返回“[Char]”而不是“IO [Char]”。在我看来,我仍然认为势在必行。任何指针,解决此问题的建议将不胜感激。如果我需要提供其余代码,请告诉我。
RODB.hs:
{-# LANGUAGE RecordWildCards, OverloadedStrings, PackageImports #-}
module Main where
import RODB
import ROOutput
import System.Environment
import Database.HDBC
import Network.Socket(withSocketsDo)
import Network.CGI
import Text.XHtml
import qualified "bytestring" Data.ByteString.Lazy.Char8 as LBS
import Data.Aeson
page :: Html
page = body << h1 << str
main = runCGI $ handleErrors cgiMain
cgiMain :: CGI CGIResult
cgiMain =
do out <- getTopBrands 10 1
setHeader "Content-type" "application/json"
output $ renderHtml page out
getTopBrands :: Integer -> Integer -> IO [Char]
getTopBrands limit sorted =
do let temp = 0
dbh <- connect "127.0.0.1" "ReachOutPublicData" "root" "admin" "/tmp/mysql.sock"
if sorted == 1
then do brandlist <- getBrands dbh limit True
json <- convPublicBrandEntrytoJSON brandlist
return $ LBS.unpack json
else do brandlist <- getBrands dbh limit False
json <- convPublicBrandEntrytoJSON brandlist
return $ LBS.unpack json