1 つまたは複数の Web ページから情報をスクレイピングしてフラッシュ カードに変換する小さなプログラムを書き直そうとしています。ここに小さなスニペットがあります:
-- | this takes a string and produces IO [Tag String]
getVerbePage x = fmap parseTags $ openURL $ "http://leconjugueur.lefigaro.fr/conjugaison/verbe/" ++ x ++ ".html"
main = do
tags <- getVerbePage "aller"
-- | from here I do whatever I like with a clean [Tag String]
一度に 1 つずつ実行しても問題はありません。IO は do ループに移動し、純粋な関数で必要なことを実行します。これを繰り返し行う方法がよくわかりません。基本的に私が求めているのは次のとおりです。
-- | this takes a string and produces IO [Tag String]
getVerbePage x = fmap parseTags $ openURL $ "http://leconjugueur.lefigaro.fr/conjugaison/verbe/" ++ x ++ ".html"
main = do
verbsString <- getLine -- | example input "aller pouvoir"
let verbs = splitOn " " verbsString -- | list of strings
pages <- getVerbePages verbs
-- | from here use pure functions on pages, which would be type [[Tag String]]
getVerbePages :: [String] -> [[Tag String]] -- | I guess.
getVerbePages ps = ??????
問題は、ps の各文字列をループしてきれいに返すように getVerbePages を作成するにはどうすればよいかということです。私はこれまで、再帰的なアクションとそのすべてを問題なく行うことができましたが、これはほとんど Haskell の初心者ですが、IO アクションを繰り返すときにこれらすべてがどのように機能するかを理解していません。