Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/objective-c/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在Haskell中为受限类型定义实例_Haskell - Fatal编程技术网

在Haskell中为受限类型定义实例

在Haskell中为受限类型定义实例,haskell,Haskell,我正在使用以下数据类型: data Exp a = |Const a |Simetrico (Exp a) |Mais (Exp a) (Exp a) |Menos (Exp a) (Exp a) |Mult (Exp a) (Exp a) 但是a应该是数字类型。 我会这样定义Eq: instance Eq (Exp a) where a == b | ... = True | otherwise = False 但是我没有说我的a是一个数字

我正在使用以下数据类型:

data Exp a =
|Const a
|Simetrico (Exp a)
|Mais (Exp a) (Exp a)
|Menos (Exp a) (Exp a)
|Mult (Exp a) (Exp a)
但是
a
应该是数字类型。 我会这样定义
Eq

instance Eq (Exp a) where
         a == b | ... = True
                | otherwise = False

但是我没有说我的
a
是一个数字类型,所以ghci抱怨说,我该如何解决这个问题?

您在
实例
子句中添加了一个类型约束:

instance Num a => Eq (Exp a) where
         a == b | ... = True
                | otherwise = False
instance Num a=>Eq(Exp a)其中
a==b |……=真的
|否则=假

因此,现在您可以假设(在
实例的范围内)
a
Num
类型类的一个实例。

但现在我尝试使用show执行此操作,并弹出此错误:•无法推断(show a)由于在上下文中使用“show”而产生:Num a受Ficha8处实例声明的约束。hs:51:10-30可能的修复:将(show a)添加到实例声明的上下文中•在表达式中:show a在“show”的等式中:show(Const a)=在“show(Exp a)”的实例声明中显示a@DeltaXGamerPT:您可以添加额外的类型约束,如
instance(show a,Num a)=>Eq(Exp a),其中…
。但是
Eq
实例中的
show
非常奇怪。对于
show(Exp a)where
您可能还应该添加类型约束,因此
instance show a=>show(Exp a)where…