gpt4 book ai didi

haskell - Haskell 会出现哪些类型的运行时错误?

转载 作者:行者123 更新时间:2023-12-02 12:28:53 26 4
gpt4 key购买 nike

我读到 Haskell 实际上可能会出现运行时错误,尽管它是静态类型和函数式的。但是,没有人说这些可能是什么运行时错误。有人知道吗?

最佳答案

标准库(base 包)可能引发的所有运行时异常均在 Control.Exception 中定义。和 GHC.Exception .

error 是 GHC.Err 中定义的函数(基于 GHC.Exception):

error :: [Char] -> a
error s = raise# (errorCallException s)

如果没有被某些处理程序捕获,它会抛出 ErrorCall 异常并向 stderr 打印一条错误消息,大多数运行时异常都是由 base 中的纯函数引发的code> 是由 error 实现的。

一些例子:

undefined,尚未实现的代码的占位符,定义为

undefined :: a
undefined = error "undefined"

由于其类型,它将通过编译步骤,并且在运行时评估时会引发异常。

由于历史原因,GHC标准库导出了一些部分函数,​​例如:

head                    :: [a] -> a
head (x:_) = x
head [] = badHead

badHead :: a
badHead = errorEmptyList "head"

errorEmptyList :: String -> a
errorEmptyList fun =
error (prel_list_str ++ fun ++ ": empty list")

IOException 总结了您在其他编程语言中可能见过的大多数普通 IO 异常,例如FileNotFound、NoPermission、UnexpectedEOF 等。它在 System.IO.Error 中得到进一步扩展。并且仅在 IO monad 的上下文中抛出。

base中有6个算术异常,分别是

data ArithException
= Overflow
| Underflow
| LossOfPrecision
| DivideByZero
| Denormal
| RatioZeroDenominator

两个数组访问异常,分别是:

data ArrayException
= IndexOutOfBounds String
| UndefinedElement String

四种异步异常,即设计为在进程之间传递的异常,它们是:

data AsyncException
= StackOverflow
| HeapOverflow
| ThreadKilled
| UserInterrupt

当计算明显不会终止时:NonTermination
当一个或多个进程被永远阻塞时:BlockedIndefinitelyOnMVar , Deadlock
当模式匹配失败时(主要是在 monad 中): PatternMatchFail
当断言失败时:AssertionFailed

还有很多很多。

关于haskell - Haskell 会出现哪些类型的运行时错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34848154/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com