2016-06-21 1 views
3

Comment puis-je convertir un String concaténé en un Turtle FilePath? Par exemple, le programme suivant essaie de lire certains fichiers texte, de les concaténer en un nouveau et de supprimer les anciens. Il ne semble pas fonctionner même si l'extension OverloadedStrings est activée:Convertir la chaîne en Turtle.FilePath

{-# LANGUAGE OverloadedStrings #-} 

module Main where 

import System.Environment 
import System.IO 
import Control.Monad 
import Turtle 
import Turtle.Prelude 
import qualified Control.Foldl as L 

main :: IO() 
main = do 
    params <- getArgs 
    let n    = read $ params !! 0 
     k    = read $ params !! 1 
    -- Some magic is done here 
    -- After a while, read generated .txt files and concatenate them 
    files <- fold (find (suffix ".txt") ".") L.list 
    let concat = cat $ fmap input files 
    output (show n ++ "-" ++ show k ++ ".txt") concat 
    -- Remove old .txt files 
    mapM_ rm files 

L'erreur est jeté:

Couldn't match expected type ‘Turtle.FilePath’ 
       with actual type ‘[Char]’ 
    In the first argument of ‘output’, namely 
     ‘(show n ++ "-" ++ show k ++ ".txt")’ 

Le passage à output "example.txt" concat serait tout simplement fonctionner correctement. N'est-ce pas String juste un alias de type [Char]?

+1

'fromString' répertorié [ici] (http://hackage.haskell.org/package/turtle-1.2.8/docs/ Turtle.html) pourrait fonctionner. – pdexter

+0

Mais vous devriez probablement utiliser l'interface 'Format' de tortue trouvée [ici] (http://hackage.haskell.org/package/turtle-1.2.8/docs/Turtle-Format.html) – pdexter

Répondre

6

Stringest juste un alias à [Char], oui.

Vous voyez le bit où il est dit {-# OverloadedStrings #-}? Cela fait que le compilateur insère automatiquement fromString partout où vous écrivez une chaîne littérale . Il ne pas l'insérer automatiquement n'importe où ailleurs que vous touchez une chaîne, seulement quand c'est une constante de chaîne.

Si vous appelez manuellement fromString sur le résultat de l'expression entière pour la construction du chemin, cela le corrigera probablement. (En particulier, la fonction show renvoie toujours String, pas n'importe quel type de chaîne surchargée.)

+0

Je comprends, merci pour me le rappelant. Et oui, en utilisant 'fromString' a automatiquement corrigé l'erreur de type. – jarandaf