如何在Haskell中定义自定义异常?

me2*_*me2 6 haskell exception

Control.Exception文档说我可以执行以下操作来创建自己的异常:

 data MyException = ThisException | ThatException
     deriving (Show, Typeable)

 instance Exception MyException
Run Code Online (Sandbox Code Playgroud)

如果我将其粘贴到文件中并进行编译(在导入Control.Exception和Data.Typeable之后),我得到:

exp.hs:6:20:
    Can't make a derived instance of `Typeable MyException'
      (You need -XDeriveDataTypeable to derive an instance for this class)
    In the data type declaration for `MyException'
Run Code Online (Sandbox Code Playgroud)

我必须打开此扩展程序才能拥有用户定义的异常吗?如果没有,请有人举个例子.谢谢.

GS *_*ica 5

是的,您需要打开该扩展程序.尝试Typeable手动编写实例并不是一个好主意,因为它与GHC的内部有一些联系.

  • 如果您的意思是Haskell标准,那么就没有用户定义的异常.如果您的意思是GHC实施的扩展语言,那么它们确实存在,如上所述. (2认同)