2011-03-19 69 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的一位大師來回答這個問題。