定义新的参数化异常类型

时间:2014-05-20 22:46:14

标签: exception haskell

我需要抛出一个异常,其中包含一些多态类型的东西a供处理程序处理,比如

data MyException a = MyException a
    deriving (Typeable)

我最初有Exception个实例:

instance Show (MyException a) where
    show _ = "MyException"
instance Exception (MyException a)

但是这是

的类型错误
No instance for (Typeable a)
  arising from the superclasses of an instance declaration
In the instance declaration for
  ‘Exception (MyException a)’

我需要制作a一个Dynamic吗?这似乎是错的,因为我们已经在处理程序中做了那种强制性的东西。这样做的惯用方法是什么?

我正在进行GHC 7.8

1 个答案:

答案 0 :(得分:5)

我还没有通过测试,但这可能足以以这种方式修改您的代码:

instance Typeable a => Exception (MyException a)

(事实上,你真正要求的是

instance Typeable (MyException a) => Exception (MyException a)

但是由于deriving子句,只要有Typeable a,就知道你在上下文中需要实例。)