我想用Haskell Turtle做一些CSV文件處理,但是我在使用選項解析器中的Turtle.FilePath
時遇到了問題。 下面是一個exampple:使用Haskell Turtle的FilePath和readFile
{-# 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,如果這有所作爲。