Conor McBride的某些作品《Diff,Dissect》将数据类型的派生与它们的“单孔上下文类型”相关联。也就是说,如果采用该类型的派生形式,则将剩下一个数据类型,该数据类型向您显示该数据类型在任何给定点从内部看起来如何。 因此,例如,如果您有一个列表(在Haskell中) data List a = [] | a : List a 这对应于 data List a = 1 + a * List a 通过一点数学魔术,导数是 data ListDeriv a = List a * List a 这被解释为意味着在列表中的任何一点处,左侧都会有一个列表,而右侧则有一个列表。我们可以使用派生数据结构浏览原始列表。 现在,我有兴趣对图形进行类似的操作。图的常见表示形式是一组顶点和边,它们可以通过以下数据类型来简单地实现: data Gr a b i = Gr [(i,a)] [(i,i,b)] 如果我正确理解的话,就图索引而言,这种数据类型的派生i应该是类似的。 data GrDeriv a b …