最近我有一个字符串列表,需要独立遍历每个字符串并执行一些IO功能.
所以我基本上就是这样:
goOverList :: [String] -> IO ()
goOverList (x:[]) = do
putStrLn x
goOverList (x:xs) = do
goOverList [x]
goOverList xs
main = do
let myList = ["first", "second", "third"]
goOverList myList
Run Code Online (Sandbox Code Playgroud)
我IO有点复杂,但这是它的要点(需要有一个功能超过列表,并IO根据列表成员做)我希望有人可以告诉我如何更好地做到这一点.
sepp2k和solrize是正确的推荐mapM_.但是,本着教导你钓鱼而不是给你钓鱼的精神,这里有你可以尝试的东西:
(String -> IO ()) -> [String] -> IO ().String用a得到(a -> IO ()) -> [a] -> IO (),并搜索.现在第二次搜索的第三个结果是mapM_ :: Monad m => (a -> m b) -> [a] -> m (),这正是你想要的.(第一个答案,closeFdWith :: (Fd -> IO ()) -> Fd -> IO ()不是相关的结果;第二个答案,是相关的,traverse_ :: (Foldable t, Applicative f) => (a -> f b) -> t a -> f ()但理解和使用有点复杂.)