J'essaie d'utiliser Haskell Turtle pour effectuer un traitement de fichier CSV, mais j'ai du mal à utiliser le Turtle.FilePath
à partir de l'analyseur d'options. Voici un exampple:Utilisation de FilePath de Haskell Turtle avec 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
J'ai un fichier salaries.csv
dans le même répertoire. Si je cours ceci, je reviens à FilePath "salaries.csv": openBinaryFile: does not exist (No such file or directory)
. L'utilisation de tfpToPfp
donne le même résultat. Si je commente le premier readFile
et décommenter l'autre qui appelle BL.readFile sname
alors cela fonctionne parfaitement. J'ai également essayé csvData <- BL.readFile $ fromString (tfpToStr fname)
, qui jette aussi une erreur.
Malheureusement, BL.readFile
ne prend pas un Turtle.FilePath
directement; il se plaint qu'il n'a pas obtenu un Prelude.FilePath
. Alors comment est-il supposé obtenir un Turtle.FilePath
en BL.readFile
? J'utilise le résolveur de pile LTS-9.9 si cela fait une différence.