4

私には機能があります

import System.Exit

exit_and_report_type_mismatch :: String -> IO ExitCode
exit_and_report_type_mismatch error_message = do
    putStrLn error_message
    exitFailure

そして、そのような別のセクション

interpret_expr :: Vars -> Expr -> Val        
interpret_expr vars (Plus (ConsE _ _) (NumE _)) = exit_and_report_type_mismatch "Type Error: Can only concatenate list (not int) to list"

Haskell は、Val 型 (私が定義した別のデータ型) を期待していると不平を言っていますが、実際には IO 型の Exitcode を受け取ります。当然のことですが、exit_and_report_mismatch は、Val ではない IO ExitCode を返しています。

「exit_and_report_type_mismatch」内から Haskell プログラムを完全に中止するにはどうすればよいですか? Haskell の例外について少し読みましたが、説明が意味をなさないか、オプションではないメイン関数から ExitWith を呼び出さなければならないことに言及しています。

4

2 に答える 2