我有一个文件,其中包含一组200,000多个单词,我希望程序读取数据并将其存储在数组中,并形成一个包含所有200,000多个单词的新数组。
我把代码编写为
import System.IO
main = do
handle <- openFile "words.txt" ReadMode
contents <- hGetContents handle
con <- lines contents
putStrLn ( show con)
hClose handle
但它在第5行给出了错误类型错误
文本文件的格式为
ABRIDGMENT
ABRIDGMENTS
ABRIM
ABRIN
ABRINS
ABRIS
等等
代码中的修改是什么,它可以形成一个单词数组
我在python(HTH)中解决了它
def readFile():
allWords = []
for word in open ("words.txt"):
allWords.append(word.strip())
return allWords
答案 0 :(得分:4)
也许
readFile "words.txt" >>= return . words
类型
:: IO [String]
或者你可以写
getWordsFromFile :: String -> IO [String]
getWordsFromFile file = readFile file >>= return . words
并用作
main = do
wordList <- getWordsFromFile "words.txt"
putStrLn $ "File contains " ++ show (length wordList) ++ " words."
来自@sanityinc和@Sarah的非常有建设性的评论(谢谢!):
@sanityinc:&#34;其他选项:fmap words $ readFile file
或words <$> readFile file
,如果您已从<$>
&#34; <{}导入Control.Applicative
/ em>的
@Sarah:&#34;要详细说明一下,只要您看到foo >>= return . bar
,就可以(并且应该)将其替换为fmap bar foo
,因为您实际上并未使用Monad
Applicative
附带的额外权力,在大多数情况下,将自己限制在不必要的复杂类型是没有益处的。今后Monad
是{{1}}&#34;