是否有传统的方法来映射使用 IO 的函数?具体来说,我想映射一个返回某种随机值的函数。使用法线贴图会产生类型为 ([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] []
最佳答案
标准方式是通过:
Control.Monad.mapM :: (Monad m) => (a -> m b) -> [a] -> m [b]
这是按顺序实现的:
sequence :: (Monad m) => [m a] -> m [a]
关于haskell - 在 Haskell 中映射 IO,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3159441/