我正在尝试使用不同的数据结构来实现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
它告诉我这是一个非法类型的同义词。我尝试了其他各种排列,但似乎都没有。任何人都可以帮助我吗?
答案 0 :(得分:6)
如果您阅读完整的错误消息,您会发现它告诉您如何在实例声明中使用类型同义词,即使用语言扩展名TypeSynonymInstances。例如,您可以在命令行上传递-XTypeSynonymInstances。
答案 1 :(得分:1)
我通过将其包装成newtype来实现它。认为丑陋。我想你必须等待一位Haskell大师回答这个问题。