我需要抛出一个异常,其中包含一些多态类型的东西a供处理程序处理,比如
data MyException a = MyException a
deriving (Typeable)
Run Code Online (Sandbox Code Playgroud)
我最初有一个Exception实例的地方:
instance Show (MyException a) where
show _ = "MyException"
instance Exception (MyException a)
Run Code Online (Sandbox Code Playgroud)
但是这是一个类型错误
No instance for (Typeable a)
arising from the superclasses of an instance declaration
In the instance declaration for
‘Exception (MyException a)’
Run Code Online (Sandbox Code Playgroud)
我需要做a一个Dynamic吗?这似乎是错的,因为我们已经在处理程序中做了那种强制性的东西.这样做的惯用方法是什么?
我在GHC 7.8上
我没有测试过,但这可能足以以这种方式修改你的代码:
instance Typeable a => Exception (MyException a)
Run Code Online (Sandbox Code Playgroud)
(事实上,你真正要求的是
instance Typeable (MyException a) => Exception (MyException a)
Run Code Online (Sandbox Code Playgroud)
但是因为这个deriving条款,你知道你随时都有上下文所要求的实例Typeable a.)
| 归档时间: |
|
| 查看次数: |
58 次 |
| 最近记录: |