我正在尝试使用 Haskell Turtle 进行一些 CSV 文件处理,但是我在使用Turtle.FilePath
来自选项解析器的问题时遇到了麻烦。这是一个例子:
{-# LANGUAGE OverloadedStrings #-}
module Main where
import Lib
import Control.Applicative
import qualified Data.ByteString.Lazy as BL
import Turtle
data Args = Args Turtle.FilePath
deriving Show
tfpToStr :: Turtle.FilePath -> String
tfpToStr fpath = show fpath
tfpToPfp :: Turtle.FilePath -> Prelude.FilePath
tfpToPfp fpath = show fpath
parser :: Parser Args
parser = Args <$> (argPath "fname" "The file containing the data")
sname :: String
sname = "salaries.csv"
main :: IO ()
main = do
Args fname <- options "Salary Printer" parser
csvData <- BL.readFile (tfpToStr fname)
-- csvData <- BL.readFile sname
putStrLn $ show csvData
我salaries.csv
在同一目录中有一个文件。如果我运行这个,我会回来FilePath "salaries.csv": openBinaryFile: does not exist (No such file or directory)
。使用tfpToPfp
产生相同的结果。如果我注释掉第一个readFile
并取消注释另一个调用,BL.readFile sname
那么它会完美运行。我也试过csvData <- BL.readFile $ fromString (tfpToStr fname)
了,也报错。
可惜BL.readFile
没有Turtle.FilePath
直接取;它抱怨它没有得到一个Prelude.FilePath
.
那么一个人应该如何Turtle.FilePath
进入BL.readFile
呢?
如果有区别,我正在使用堆栈解析器 LTS-9.9。