Quand je teste ma fonction intervalFinder en GHCi il semble fonctionner, mais lorsque je tente de le compiler, je ne sortie:Lazy ByteString comportement étrange ou bug?
La fonction fonctionne sur l'entrée:
*Main> intervalFinder $[B.pack"first",B.pack"second",B.empty,B.pack"third",B.emp
ty]
Loading package bytestring-0.9.2.1 ... linking ... done.
["Start Time: first","End Time: second","Start Time: third","End Time: third
"]
Et en cours d'exécution principale:
*Main> main
Loading package bytestring-0.9.2.1 ... linking ... done.
*Main> :q
Leaving GHCi.
impressions en results.txt:
Start Time: firstEnd Time: secondStart Time: thirdEnd Time: third
mais si je lance ghc test3.hs, le fichier de sortie est 0kb (et évidemment pas de données dedans!)
Est-ce que je fais quelque chose de mal?
code:
{-# LANGUAGE OverloadedStrings #-}
import qualified Data.ByteString.Char8 as B
import qualified Data.ByteString.Lazy.Char8 as Bl
import System.IO
import System.Environment
intervalFinder :: [B.ByteString]->[B.ByteString]
intervalFinder x = helper x ""
where
helper (x:xs) ""
| x /= "" = ((B.append (B.pack("Start Time: ")) x)):(helper xs x)
| otherwise = helper xs ""
helper (x:xs) y
| x == "" = ((B.append (B.pack("End Time: ")) y)):(helper xs "")
| otherwise = helper xs x
helper _ _ = []
main = do
filehandle <- openFile "result.txt" WriteMode
Bl.hPutStr (filehandle) . Bl.fromChunks . intervalFinder $[B.pack"first",B.pack"second",B.empty,B.pack"third",B.empty]
Merci!
Cela a fait l'affaire! J'étais coincé parce qu'avant d'insérer inverfalFinder, le code fonctionnait bien (j'avais une carte (Bl.pack.Blackpack) en place) et je n'arrivais pas à comprendre pourquoi l'un fonctionnait et l'autre non. – MdxBhmt
Le code 'hClose' est dangereux (peut laisser fuir le handle en cas d'exceptions). C'est ce que 'withFile' est pour. – Peaker