C'è un modo tradizionale per mappare su una funzione che utilizza IO? In particolare, mi piacerebbe mappare su una funzione che restituisce un valore casuale di qualche tipo. Usando una mappa normale si otterrà un output di tipo ([IO b]), ma per decomprimere i valori nella lista da IO, ho bisogno di qualcosa di tipo (IO [b]). Così ho scritto ...Mappatura su IO in Haskell
mapIO :: (a -> IO b) -> [a] -> [b] -> IO [b]
mapIO f [] acc = do return acc
mapIO f (x:xs) acc = do
new <- f x
mapIO f xs (new:acc)
... che funziona bene. Ma sembra che ci dovrebbe essere una soluzione per questo costruito in Haskell. Per esempio, utilizzare un esempio caso:
getPercent :: Int -> IO Bool
getPercent x = do
y <- getStdRandom (randomR (1,100))
return $ y < x
mapIO (\f -> getPercent 50) [0..10] []
In futuro, prova [Hoogle] (http://haskell.org/hoogle/?hoogle= (a + -% 3E + IO + b \) + -% 3E + \ [a \] + -% 3E + IO + \ [b \]) per scoprire se esiste già una funzione apparentemente ovvia (perché di solito lo fanno). È incredibilmente utile! –
Grazie, sembra una grande risorsa! – unignorant
Inoltre, controlla Hayoo - è come Hoogle, ma controlla le cose in modo leggermente diverso. – BMeph