我的haskell代码在使用haskell打开文件时出错

我的haskell代码在使用haskell打开文件时出错,haskell,Haskell,我是初学者,我正在尝试阅读一个叫做“论文”的文件夹的文件(你可以在附件中看到我的项目树)。我正在使用此代码执行以下操作: 模块LeerDocumentos2,其中 导入系统目录 导入System.IO不安全 导入System.IO() 导入文档 读卡器:IO[Documento] 读卡器=do setCurrentDirectory“文件” 再次说明,不要使用unsafePerformIO 我打赌你的问题是getDirectoryContents返回和。这是目录 至少我会过滤掉这些。如果该目录

我是初学者,我正在尝试阅读一个叫做“论文”的文件夹的文件(你可以在附件中看到我的项目树)。我正在使用此代码执行以下操作:

模块LeerDocumentos2,其中
导入系统目录
导入System.IO不安全
导入System.IO()
导入文档
读卡器:IO[Documento]
读卡器=do
setCurrentDirectory“文件”

再次说明,不要使用
unsafePerformIO

我打赌你的问题是
getDirectoryContents
返回
这是目录

至少我会过滤掉这些。如果该目录有任何子目录,您还需要过滤掉这些子目录

而且,我会熟悉Control.Monad。试着这样做:

import Control.Monad (forM)
import Data.List  (isPrefixOf)

reader = do setCurrentDirectory ...
            paths <- getDirectoryContents dir
            let files = filter (not . isPrefixOf ".") paths
            forM files $ \file -> do
              putStrLn $ "processing " ++ file
              leerDocumento file
import-Control.Monad(表单)
导入数据列表(isPrefixOf)
reader=do setCurrentDirectory。。。
路径做
putStrLn$“处理”++文件
leerDocumento文件

现在您可以摆脱
unsafePerformIO
leerDocumentos

您的
main
函数是什么?@ErikR是这样的:module main where main::IO()main=undefinedyou正试图打开
(包括这些内容请参阅)-您可能应该从使用
listDirectory
开始,而不是作为一个很好的练习,您应该尝试使用
doesFileExist
检查您试图打开的东西是否确实是一个文件
import Control.Monad (forM)
import Data.List  (isPrefixOf)

reader = do setCurrentDirectory ...
            paths <- getDirectoryContents dir
            let files = filter (not . isPrefixOf ".") paths
            forM files $ \file -> do
              putStrLn $ "processing " ++ file
              leerDocumento file