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



我有一个文件,其中包含一组200000多个字,我希望程序读取数据并将其存储在数组中,然后用所有200000多个词组成一个新数组。

我把代码写成

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

也许

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非常有建设性的评论(谢谢!):

@santiyinc:"其他选项:如果已从Control.Applicative导入<$>,则为fmap words $ readFile filewords <$> readFile file"

@Sarah:"详细说明一下,每当你看到foo >>= return . bar时,你都可以(也应该)用fmap bar foo代替它,因为你实际上并没有使用Monad带来的额外功能,而且在大多数情况下,将自己限制在一个不必要的复杂类型中是没有好处的。将来ApplicativeMonad的一个超类时,情况会更糟。"

相关内容

  • 没有找到相关文章

最新更新