このコードを実行しようとすると...
module Main where
import qualified Data.Text.Lazy.IO as LTIO
import qualified Data.Text.Lazy as LT
import System.IO (IOMode(..), withFile)
getFirstLine :: FilePath -> IO String
getFirstLine path =
withFile path ReadMode (\f -> do
contents <- LTIO.hGetContents f
return ("-- "++(LT.unpack . head $ LT.lines contents)++" --"))
main::IO()
main = do
firstLine <- getFirstLine "/tmp/foo.csv"
print firstLine
私は得る
"-- *** Exception: Prelude.head: empty list
...「/tmp/foo.csv」の最初の行を出力すると予想される場所。その理由を教えてください。最終的に、私はファイル入力からテキストの怠惰なリストを作成する方法を理解しようとしています。