¿Existe una forma tradicional de asignar una función que utiliza IO? Específicamente, me gustaría asignar una función que devuelva un valor aleatorio de algún tipo. Usar un mapa normal dará como resultado una salida de tipo ([IO b]), pero para descomprimir los valores en la lista de IO, necesito algo del tipo (IO [b]). Así que escribí ...Mapeo sobre IO en 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)
... que funciona bien. Pero parece que debería haber una solución para esto integrada en Haskell. Por ejemplo, un ejemplo Caso de uso:
getPercent :: Int -> IO Bool
getPercent x = do
y <- getStdRandom (randomR (1,100))
return $ y < x
mapIO (\f -> getPercent 50) [0..10] []
En el futuro, pruebe [Hoogle] (http://haskell.org/hoogle/?hoogle= (a + -% 3E + IO + b \) + -% 3E + \ [a \] + -% 3E + IO + \ [b \]) para averiguar si ya existe alguna función aparentemente obvia (porque normalmente lo hacen). ¡Es asombrosamente útil! –
¡Gracias, parece un gran recurso! – unignorant
Además, echa un vistazo a Hayoo, es como Hoogle, pero verifica las cosas de forma ligeramente diferente. – BMeph