0

我有两个关于 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 将无限重复。

4

1 回答 1

1

对于问题 1,我会说使用类似的东西

data Attr = Attr (Maybe Bool) -- Source 
                 (Maybe Bool) -- Target 
                 (Maybe Bool) -- Ghost

对于问题 2,我会使用类似

data Graph = Graph [STMT]
于 2013-01-04T10:13:54.437 回答