コマンドライン引数 (ユーザー名、パスワード、日付) を受け取り、Network.HTTP.Conduit
ライブラリを使用して xml メッセージをサーバーに送信する既存のプログラムがあります。次に、結果を解析し、いくつかの作業を行い、blaze-html を使用してファイルに書き出します。
それはすべて魔法のように機能します。haskeline
ただし、パスワードが表示されないように使用すると思いました。ユーザーが指定した値を取得して出力するコマンド ライン プログラムを作成することはできますが、conduit を使用する関数を呼び出しても戻りません。
問題のあるコードは次のとおりです。
main = runInputT defaultSettings loop
where
loop :: InputT IO ()
loop = do
Just username <- getInputLine "WM username: "
Just password <- getPassword (Just '*') "WM password: "
Just date <- getInputLine "Date (YYYYMMDD): "
outputStrLn "querying WM..."
clients <- lift $ getWMClients username password
outputStrLn "successfully retrieved client list from WM..."
let outHeader = renderHeader date username
reportString <- mapM (\x -> createString x clients) cList
lift $ writeFile (date ++ "_report.html") (outHeader ++ concat reportString)
outputStrLn "Done"
関数 getWMClients 関数は次のとおりです。
getWMClients :: Username -> String -> IO [Client]
getWMClients username password = do
let f = [Size "-1", Skip "0"]
let fs = [Select "id",
Select "status",
Select "last-name",
Select "first-name",
]
let query = WMQuery {transaction=SHARE,service=Query,businessObject=CONT,field=f,fields=fs}
results <- doQuery username (Just password) Nothing (Just query)
rows <- xmlResultsToMaps results
let clients = map makeClient rows
return clients
プログラムを実行すると、「querying WM...」でハングします。http-conduit が実際に実行されているとは思えません。これを機能させる方法に関するヒントはありますか?
前もってありがとう、ニール