2017-06-29 61 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