2011-03-19 180 views
3

我试图实现Prim算法不同的数据结构。所以我做了一个类来抽象什么,我想做的事:简单哈斯克尔实例问题

class VertexContainer a where 
    contains :: a -> Vertex -> Bool 
    insert :: a -> WeightedEdge -> a 
    numVertices :: a -> Int 

现在我想用一个堆(从Data.Heap)作为我的顶点容器。但我不能为了我的生活找出语法。正如你可以从insert声明看,容器只能容纳WeightedEdge s,这是一种数据类型。所以我试过:

instance VertexContainer (Heap MinPolicy WeightedEdge) where 
    contains _ _ = True 

它告诉我这是一个非法类型的同义词。我尝试了各种其他排列,并且它们都不起作用。谁能帮我?

回答

6

如果你读了整个错误消息,你会发现,它会告诉你如何能在一个实例声明使用类型代名词,即通过使用语言扩展TypeSynonymInstances。例如,您可以在命令行上传递-XTypeSynonymInstances。

+0

对不起,应该已经更多解释错误。其实我在通过这个,而且我得到了完整的错误信息是“在实例中的非法类型同义词家庭应用:” – Xodarap 2011-03-19 17:04:37

+2

你能申报上HeapT的实例,而不是同义词堆?扫描相关类型“Prio”的来源可能会做一些“不寻常”的事情。 – 2011-03-19 17:58:21

+0

@stephen tetley:谢谢,这工作! – Xodarap 2011-03-19 19:47:31

1

我把它通过包装成NEWTYPE这方面的工作。被认为是丑陋的。我想你必须等待Haskell的一位大师来回答这个问题。