Haskellでマーシャリング(showとread)
30分プログラム、その413。Haskellでマーシャリングにチャレンジしようとして、showとreadで十分なことに気がついた。
でも、せっかくなので途中の状態を保存して、中断可能な関数を書いてみた。たぶん、id:Gemmaさんあたりに継続使おうぜ、とか言われるんだろうなぁ。
使い方
$ ./marshal fact:10000 fact:9999 fact:9998 fact:9997 fact:9996 ^C $ cat dump (0,8934) $ ./marshal fact:9995 fact:9994 fact:9993 ...
ソースコード
import System.Directory fact :: Int -> Int -> IO Int fact m 0 = return m fact m n = do putStrLn $ "fact:" ++ show n writeFile "dump" $ show (m,n) fact (m*n) (n-1) resume :: IO Int resume = do (m,n) <- readFile "dump" >>= return . read fact m n main = do exist <- doesFileExist "dump" if exist then resume >>= print else fact 1 10000 >>= print