我想解決清潔這個問題(非常類似於Haskell這樣的語言):如何用兩個模板參數編寫一個類,其中一個是另一個的列表/數組?
有一個class Node t
,有兩種情況:instance Node EdgeList
和instance Node Adjacency
。我想創建一個Graph,它是一個數組或節點列表。
的Graph
的定義是:
class Graph t1 t2 | Node t2 where
resetGraph :: (t1 t2) -> (t1 t2)
graphSize :: (t1 t2) -> Int
...
我還想寫的實例。一個有數組,另一個有列表。首先,我試圖與名單,但我得到一個錯誤:t2 not defined
instance Graph [t1] t2 | t2 t1 where
(resetGraph) :: [t1] -> [t1]
(resetGraph) x = []
...
它將被稱爲例如像這樣:resetGraph listAdj
其中listAdj是Adjacency
節點
的列表。如果我只是寫:instance Graph [tt] tt
然後我得到這個錯誤:Error: this type variable occurs more than once in an instance type
。
謝謝你,我現在好理解。出於某種原因,我在'instance Graph [] Node ...'處得到一個錯誤。錯誤是:'節點未定義'。節點由兩個實例定義。我在'class Graph t2 t2 |沒有錯誤節點t2在哪裏' –
@IterAtor不客氣。對不起,我寫了'Node',我應該寫'Adjacency'或'EdgeList'。 (錯誤告訴你'Node'不是一個類型。)現在已經修復了。 – Keelan
但我覺得我不應該使用'Adjacency'或'EdgeList'直接,因爲每次我都需要在'Graph'功能'Node'定義(該功能在這兩種情況下的定義) –