質問

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]
.

一つのことをやっています問題なしに、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を書いてきれいに戻すのですか?私は再帰的な行動とこの時点までのすべてのもので大丈夫に行うことができました。

役に立ちましたか?

解決

物事のリストを介して同じIOアクションを繰り返す場合は、mapMを使用できます。そのタイプの署名は(ここに専門に専門としています)

mapM :: (a -> IO b) -> [a] -> IO [b]
.

IOで使用すると、getVerbPage Type変数がaで、String Type変数はbです。その後、[Tag String]を持つことになります。これはmapM getVerbPage :: [String] -> IO [[Tag String]]の定義として必要なものです。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top