有没有一种传统的方法可以映射使用IO的函数?具体来说,我想映射返回某种随机值的函数。使用普通的map将导致输出类型为([IO b]),但是要从IO中解包列表中的值,我需要一个类型为(IO [b])的东西。所以我写了...
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] []