RSS

readIOで例外処理

パースに失敗してプログラムが落ちるでは意味がないので。

最初はreadを使っていたがreadIOに変更してごにょごにょと次のように。

import IO hiding (catch)
import Control.Exception
import Prelude hiding (catch)
-- ......
readPos :: IO (Int, Int)
readPos  = do
  line <- getLine
  catch (readIO line :: IO (Int,Int))
            (\e -> return (e::SomeException) >>
                   putStr "Input again!: " >>
                   hFlush stdout>>
                   readPos)

てな具合で。だんだんなんでもかんても再帰で処理する脳になってきた。よしよし。