2017-06-29 60 views
1

在Haskell中,如何去写入任意大量的文件?写入Haskell中的多个文件

举个例子,假设我想把az这两个字母放在一个文件名里面,这个文件的内容是字母。最初的尝试是做到以下几点:

main :: IO() 
main = do 
     let letter = map (:"") ['a'..'z'] 
     zipWith writeFile letter letter 

这将产生以下错误:

Couldn't match expected type 'IO()' with actual type '[IO()]'

我觉得应该有一个方法来遍历一个do块列表,但我避风港现在还找不到它。

+0

也许你可以用虚假行为折叠你的'zipWith',这样你就可以得到正确的类型? – bli

+0

@bli我在这里挣扎的是我想要类型为'[IO()]',因为我想执行多个IO操作。我觉得do block应该有一个方法来接受一个列表,或者将它展平给我。 – martin

回答

2

您需要的功能是zipWithM

Re。 way to loop through a list in a do block,这里也有一个功能 - sequence,所以你可以写sequence $ zipWith writeFile letter letter

+0

我也必须将main的类型更改为'main :: IO [()]',但是它为我做了。谢谢。 – martin

+1

@martin这是一个选项,尽管离开'main :: IO()'并且在''''''''''''''''后面添加'return()'作为'do'块的最后一个条目更为常见。 – chi

+0

@chi很高兴知道,谢谢。 – martin