将文件中的所有元素转换为haskell中的数组

时间:2014-04-24 09:21:12

标签: arrays file haskell

我有一个文件,其中包含一组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

1 个答案:

答案 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 filewords <$> readFile file,如果您已从<$>&#34; <{}导入Control.Applicative / em>的

@Sarah:&#34;要详细说明一下,只要您看到foo >>= return . bar,就可以(并且应该)将其替换为fmap bar foo,因为您实际上并未使用Monad Applicative附带的额外权力,在大多数情况下,将自己限制在不必要的复杂类型是没有益处的。今后Monad是{{1}}&#34;

的超类,这将更加真实。