Exception 定义新的参数化异常类型
我需要抛出一个异常,它包含一些多态类型的东西Exception 定义新的参数化异常类型,exception,haskell,Exception,Haskell,我需要抛出一个异常,它包含一些多态类型的东西a,供处理程序处理,比如 data MyException a = MyException a deriving (Typeable) 我最初有一个异常实例: instance Show (MyException a) where show _ = "MyException" instance Exception (MyException a) 但是,这是一个类型错误 No instance for (Typeable a) a
a
,供处理程序处理,比如
data MyException a = MyException a
deriving (Typeable)
我最初有一个异常
实例:
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
a动态
?这似乎是错误的,因为我们已经在处理程序中执行了这种强制操作。这样做的惯用方法是什么
我使用的是GHC 7.8我还没有测试过,但这样修改代码可能就足够了:
instance Typeable a => Exception (MyException a)
(事实上,你真正需要的是
instance Typeable (MyException a) => Exception (MyException a)
但是由于
派生
子句,您知道只要您有可键入的a
),就有上下文中所需的实例我还没有测试过,但这样修改代码可能就足够了:
instance Typeable a => Exception (MyException a)
(事实上,你真正需要的是
instance Typeable (MyException a) => Exception (MyException a)
但是由于
派生
子句,您知道只要您有可键入a
)异常的定义现在是类(可键入e,显示e)=>异常e
MyException a
只是Typeable
的一个实例,如果a
是。因此,您需要编写实例类型化a=>异常(MyException a)
。抱歉,这个问题太仓促了。真正的问题是我不想在a
上设置Typeable
约束。当然,如果我也使用Dynamic
的话,我也需要它。嗯。Exception
的定义现在是class(可键入e,Show e)=>Exception e
MyException a
只是Typeable
的一个实例,如果a
是。因此,您需要编写实例类型化a=>异常(MyException a)
。抱歉,这个问题太仓促了。真正的问题是我不想在a
上设置Typeable
约束。当然,如果我也使用Dynamic
的话,我也需要它。六羟甲基三聚氰胺六甲醚。