私には機能があります
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 を呼び出さなければならないことに言及しています。