【发布时间】:2010-07-01 15:49:22
【问题描述】:
是否有传统的方法来映射使用 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] []
【问题讨论】:
-
以后试试 [Hoogle](haskell.org/hoogle/… 看看是否已经存在一些看似显而易见的功能(因为它们通常都有)。它非常有用!
-
谢谢,这看起来是一个很棒的资源!
-
另外,看看 Hayoo - 它就像 Hoogle,但检查的东西略有不同。