私は初心者の haskell プログラマーで、MySQL DB から読み取り、JSON を出力する Haskell cgi を作成しようとしています。正しい JSON を生成することはできますが、データ型を正しく取得して JSON を正しく出力することができません。私はまた、私は主にまだ不可欠なことを考えていると思います。これが私のコードです。getTopBrands は json 出力を提供することに注意してください。
私の問題は、「IO [Char]」ではなく「[Char]」を getTopBrands から返す方法がわからないことです。私にはまだ不可欠なことを考えているように見えます。これを修正するための指針、提案をいただければ幸いです。残りのコードを提供する必要がある場合はお知らせください。
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