我想解决清洁这个问题(非常类似于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'定义(该功能在这两种情况下的定义) –