{-# LANGUAGE DeriveDataTypeable #-}
import Control.Exception
import Data.Typeable
data MyException = MyException String deriving (Show, Typeable)
instance Exception MyException
myExToString :: MyException -> String
myExToString (MyException msg) = msg
t :: ()
t = throw $ MyException "Msg"
main = catch (return t) (\e -> putStrLn $ myExToString e)
プログラムが印刷されないのはなぜ"Msg"
ですか?
更新:
コードを変更しました:
io :: IO ()
io = catch (return t) (\e -> putStrLn $ myExToString e)
main = io >>= print
しかし、それでも私のコードはキャッチしませんMyException
か?どうして?
Haskellは怠惰であり、の結果を使用するt
ことはないため、評価されることはなく、例外はスローされません。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加