如何在数据定义中要求类型类实例

use*_*134 0 haskell typeclass

假设我有这样的类型:

data Graph vertex = Graph {
  vertices :: [vertex],
  edgelist :: [(vertex, [vertex])]
}
Run Code Online (Sandbox Code Playgroud)

但是我想在类型变量顶点上有一个类型类约束,我试图像使用类型类定义那样做:

data (Eq vertex) => Graph vertex = Graph {
  vertices :: [vertex],
  edgelist :: [(vertex, [vertex])]
}
Run Code Online (Sandbox Code Playgroud)

但这会产生语法错误Illegal datatype context (use DatatypeContexts).实现这一目标的正确方法是什么?还是不可能?

Seb*_*edl 5

Haskell约定永远不会对数据类型设置约束.相反,将它们放在对数据类型进行操作的函数上.这允许您仅将约束放在实际需要它们的那些函数上.