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 []
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
[^] # Re: Autre petit problème
Posté par Axioplase ıɥs∀ (site web personnel) . En réponse au message Haskell. Évalué à 3.
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