我有两个关于 Haskell 类型表达式的问题:
问题 1 -
我想声明一个类型 NODE
data NODE = Node String ATTR
一个类型 ATTR 包含 3 个子类型,如下所示:
源布尔
目标布尔
幽灵诠释
data ATTR = Source Bool | Target Bool | Ghost Bool
但上述声明不满足 ATTR 可以包含任何子类型组合的要求,例如:
- ATTR 可以同时包含 Source Bool 和 Target Bool
- ATTR 可以同时包含 Source Bool、Target Bool 和 Ghost Int
- ATTR 甚至可以为空(不包含任何内容)
问题2 -
我想声明一个类型 GRAPH,其中一个图形可以包含 1 个或多个语句 (STMTS),如果图形为空,则不包含任何语句。所以我声明如下:
data GRAPH = Graph String STMTS
data STMTS = STMT | STMTS
但同样,正如您所见,递归数据类型 STMTS 将无限重复。