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

k3fezbri  于 2023-03-08  发布在  其他
关注(0)|答案(2)|浏览(164)

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

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

 instance Exception MyException

如果我将其粘贴到一个文件中并进行编译(在导入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'

我必须打开这个扩展才能有用户定义的例外吗?如果不是,请提供一个例子。谢谢。

llmtgqce

llmtgqce1#

是的,你需要打开那个扩展,尝试手工编写Typeable示例不是一个好主意,因为它与GHC的内部有一些联系。

46qrfjad

46qrfjad2#

是的,您可以轻松地定义Exception并使用它。

module Main (main) where
import Control.Exception
import GHC.IO (catchException)
data DropException = DropException deriving (Show)
instance Exception DropException
go = throwIO DropException
main = catchException go (\DropException -> putStrLn "Dropped")

相关问题