• [^] # Re: Autre petit problème

    Posté par (site web personnel) . En réponse au message Haskell. Évalué à 3.

    Pour faire simple, c'est impossible.

    Il faut donc que tu repenses ton problème autrement, c'est à dire que tu remarques que tu voudras éventuellement utiliser ton résultat, par exemple pour l'afficher. Et donc tu veux rester dans IO. Comme je vois juste une fonction et pas de main (dont le type est IO ()), j'en déduis que tu ne sais même pas ce que tu veux faire. Donc écrit main, et ensuite, code en te disant "je suis dans la monade IO"

    Exemple simple :

    import Random (randomRIO)
    import System (getArgs)

    shuffle' [] acc = return acc
    shuffle' l acc = do
    k <- randomRIO (0, length l - 1)
    let (lead, x:xs) = splitAt k l
    shuffle' (lead ++ xs) (x:acc)

    shuffle :: [a] -> IO [a]
    shuffle l = shuffle' l []

    ma_fonction_normale :: [String] -> [(String, Int)]
    ma_fonction_normale = map (\x -> (x, ((read x)+2)))

    main = do
    liste_d_entiers <- getArgs -- récupère une liste de nombres passés au programme
    itlse_d_enteisr <- shuffle liste_d_entiers -- permute
    let resultat = ma_fonction_normale itlse_d_enteisr -- applique une fonction "pas IO"
    print resultat -- affiche le résultat et quitte