简单的Haskell实例问题

时间:2011-03-19 16:48:07

标签: haskell

我正在尝试使用不同的数据结构来实现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

它告诉我这是一个非法类型的同义词。我尝试了其他各种排列,但似乎都没有。任何人都可以帮助我吗?

2 个答案:

答案 0 :(得分:6)

如果您阅读完整的错误消息,您会发现它告诉您如何在实例声明中使用类型同义词,即使用语言扩展名TypeSynonymInstances。例如,您可以在命令行上传递-XTypeSynonymInstances。

答案 1 :(得分:1)

我通过将其包装成newtype来实现它。认为丑陋。我想你必须等待一位Haskell大师回答这个问题。