Haskell 错误:不明确的类出现“;Ord"; data(Ord a)=>Stree a=Null |叉子(应力a)a(应力a) mkStree::(Ord a)=>[a]->a街 mkStree[]=Null mkStree(x:xs)=叉子(mkStree较小)x(mkStree较大) 其中(较小,较大)=分区(Bool)->[a]->([a],[a]) 分区pxs=([x | x
我无法重现此错误,但我可以进行一些猜测。“不明确类出现”错误意味着范围中有多个“Ord”定义,因此真正的问题不在您包含的代码中。问题是您正在导入的某个模块重新定义了“Ord”出于某种原因,或者您正在代码中重新定义它。无论哪种方式,唯一可行的方法是隐藏或限定其他定义(如Prelude中的默认定义)。如果您尝试使用非标准Ord实现,则需要导入Prelude隐藏Ord:Haskell 错误:不明确的类出现“;Ord"; data(Ord a)=>Stree a=Null |叉子(应力a)a(应力a) mkStree::(Ord a)=>[a]->a街 mkStree[]=Null mkStree(x:xs)=叉子(mkStree较小)x(mkStree较大) 其中(较小,较大)=分区(Bool)->[a]->([a],[a]) 分区pxs=([x | x,haskell,hugs,Haskell,Hugs,我无法重现此错误,但我可以进行一些猜测。“不明确类出现”错误意味着范围中有多个“Ord”定义,因此真正的问题不在您包含的代码中。问题是您正在导入的某个模块重新定义了“Ord”出于某种原因,或者您正在代码中重新定义它。无论哪种方式,唯一可行的方法是隐藏或限定其他定义(如Prelude中的默认定义)。如果您尝试使用非标准Ord实现,则需要导入Prelude隐藏Ord: data (Ord a) => Stree a = Null | Fork (Stree a) a (Stree a) m
data (Ord a) => Stree a = Null
| Fork (Stree a) a (Stree a)
mkStree :: (Ord a) => [a] -> Stree a
mkStree [] = Null
mkStree (x:xs) = Fork (mkStree smaller) x (mkStree larger)
where (smaller,larger) = partition (<= x) xs
partition :: (a->Bool) -> [a] -> ([a],[a])
partition p xs = ([ x | x <- xs, p x],
[ y | y <- xs, (not . p) y])
如果您不是有意使用非标准作战需求文件,那么您需要找出第二个作战需求文件的来源,并将其删除或隐藏。但是,您的问题中没有足够的信息让我能够说明如何执行。我希望错误消息也比您在此处列出的要长,因为它应该显示locat对Ord的两个定义进行了重新定义。我无法重现此错误,但我可以进行一些猜测。“类出现不明确”错误意味着范围中有多个“Ord”定义,因此真正的问题不在您包含的代码中。问题是您正在导入的某个模块重新定义了“Ord”出于某种原因,或者您正在代码中重新定义它。无论哪种方式,唯一可行的方法是隐藏或限定其他定义(如Prelude中的默认定义)。如果您尝试使用非标准Ord实现,则需要导入Prelude隐藏Ord:
data (Ord a) => Stree a = Null
| Fork (Stree a) a (Stree a)
mkStree :: (Ord a) => [a] -> Stree a
mkStree [] = Null
mkStree (x:xs) = Fork (mkStree smaller) x (mkStree larger)
where (smaller,larger) = partition (<= x) xs
partition :: (a->Bool) -> [a] -> ([a],[a])
partition p xs = ([ x | x <- xs, p x],
[ y | y <- xs, (not . p) y])
如果您不是有意使用非标准作战需求文件,那么您需要找出第二个作战需求文件的来源,并将其删除或隐藏。但是,您的问题中没有足够的信息让我能够说明如何执行。我希望错误消息也比您在此处列出的要长,因为它应该显示locat删除Ord的两个定义。如果从数据声明中删除Ord上下文,会发生什么
import Prelude hiding(Ord)
数据声明上的类上下文非常不直观,我怀疑这可能会导致Hugs出错
在任何情况下,都不应该在数据或新类型声明上添加上下文。它们对于某些GHC扩展都很有用,但我认为Hugs不支持这些情况。如果从数据声明中删除Ord上下文,会发生什么
import Prelude hiding(Ord)
数据声明上的类上下文非常不直观,我怀疑这可能会导致Hugs出错
在任何情况下,您都不应该在数据或新类型声明上添加上下文。它们对于某些GHC扩展都很有用,但我认为Hugs不支持任何这些情况。哪一行给了您这个错误?
数据
行?mkStree
行?两者都有?这段代码似乎没有任何类型错误。哪一行给了您这个错误错误?data
行?mkStree
行?两者都有?此代码似乎没有任何类型错误。在即将发布的haskell prime版本中,人们强烈希望删除数据decls上的类上下文。就我个人而言,我希望看到它们正式更改为GHC开发人员为GAD上的类上下文提供的语义T构造函数(其中上下文是构造所必需的,并通过模式匹配重新引入)。在即将发布的haskell prime版本中,人们强烈希望删除数据decls上的类上下文。就个人而言,我希望看到它们正式更改为GHC开发人员为GADT构造函数上的类上下文提供的语义(构建时需要上下文,并通过模式匹配重新引入)。