Question

J'essaie de réécrire un petit programme qui récupère les informations d'une ou plusieurs pages Web, puis les transforme en cartes flash.Petit extrait ici :

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

En faisant un à la fois, je n'ai aucun problème, l'IO va dans la boucle do et ensuite je fais ce dont j'ai besoin avec des fonctions pures.Je ne comprends pas vraiment comment faire cela de manière récurrente, en gros ce que je recherche c'est :

-- | 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 = ??????

La question est de savoir comment écrire getVerbePages pour parcourir chaque chaîne dans ps et la renvoyer proprement ?J'ai réussi à bien gérer les actions récursives et tout ça jusqu'à présent, c'est un nouveau venu en Haskell, mais je ne comprends pas comment tout cela fonctionne lors de la répétition d'une action IO.

Était-ce utile?

La solution

Si tu veux répéter la même chose IO action sur une liste de choses, vous pouvez alors utiliser mapM.Sa signature de type est (spécialisée ici pour IO)

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

L'utiliser avec votre getVerbPage signifierait que le a la variable de type est String et le b la variable de type est [Tag String].Alors tu aurais mapM getVerbPage :: [String] -> IO [[Tag String]], c'est ce que vous voulez comme définition de getVerbPages.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top