Hello, haskellers! Suppose we have function (it filters package filenames from apt Packages file):
> getPackageList :: FilePath -> IO [FilePath] > getPackageList packageFile = withFile packageFile ReadMode $ > \h -> do c <- hGetContents h > return $ map (drop 10) $ filter > (startsWith "Filename:") $ lines c -- (1) > where startsWith [] _ = True > startsWith _ [] = False > startsWith (x:xs) (y:ys) | x == y = startsWith xs ys > | otherwise = False When, I apply it to a Packages file I (surely) get an empty list. This is an expected result due to lazyness of hGetContents. I tried changing line (1) to > return $ map (drop 10) $ filter (startsWith "Filename:") $! lines c or > return $ map (drop 10) $! filter (startsWith "Filename:") $! lines c with no success. Chaning it to > return $! map (drop 10) $ filter (startsWith "Filename:") $ lines c makes getPackageList function return several (but not all) filenames. What I'm missing? And how can I fix my code? -- WBR, Max Vasin. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe