読み書きプログラミング

日常のプログラミングで気づいたことを綴っています

Haskellの欠点?

関数型なら更に単体テストが有効だろうと、これを機会に単体テストの習慣を身につけようと思ったのですが、ファイルから関数への入力データを読み込んで結果を確認するだけのことがHUnitでできない。
ファイルから読み込もうとすると、IOモナドの世界に入り、そこから結果が取り出せなくなる。
うーん、どうしたもんか。
追記:
runTestTTがIOを返す関数だったので、こいつを取り込むように書いたらできました。
でも、do式中でのリストの扱い方がわからず、以下のように不細工。

completeLifeFiles = ["completeLife1.sgf", "completeLife2.sgf", "completeLife3.sgf"]

main = do
    t1 <- readFile $ completeLifeFiles !! 0
    t2 <- readFile $ completeLifeFiles !! 1
    t3 <- readFile $ completeLifeFiles !! 2
    runTestTT $ TestList $
        (map completeLifeTest
            [(completeLifeFiles !! 0, t1),
            (completeLifeFiles !! 1, t2),
            (completeLifeFiles !! 2, t3)])
 where
    completeLifeTest (fileName, sgf) = TestCase  ...

追記:
できた。

completeLifeFiles = ["completeLife1.sgf", "completeLife2.sgf", "completeLife3.sgf"]

main = do
    sgfs <- mapM readFile completeLifeFiles
    runTestTT $ TestList $ map completeLifeTest (zip completeLifeFiles sgfs)
 where
    completeLifeTest (fileName, sgf) = TestCase  ...