Существует ли традиционный способ сопоставления функции, использующей IO? В частности, я хотел бы сопоставить функцию, возвращающую случайное значение. Использование обычной карты приведет к выводу типа ([IO b]), но для распаковки значений в списке из IO мне нужно что-то типа (IO [b]). Поэтому я написал ...Отображение IO в 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)
... который отлично работает. Но, похоже, должно быть решение для этого встроенного в Haskell. Например, пример использования:
getPercent :: Int -> IO Bool
getPercent x = do
y <- getStdRandom (randomR (1,100))
return $ y < x
mapIO (\f -> getPercent 50) [0..10] []
В будущем попробуйте [Hoogle] (http://haskell.org/hoogle/?hoogle= (a + -% 3E + IO + b \) + -% 3E + \ [a \] + -% 3E + IO + \ [b \]), чтобы выяснить, существует ли какая-то кажущаяся очевидная функция (потому что они обычно делают). Это потрясающе полезно! –
Спасибо, это выглядит как отличный ресурс! – unignorant
Кроме того, зайдите в Hayoo - это похоже на Hoogle, но проверяет вещи по-разному. – BMeph