Haskell类型表达式

时间:2013-01-04 09:52:09

标签: haskell-platform template-haskell haskell

我有两个关于Haskell类型表达式的问题:

问题1 -

我想声明一个类型NODE

data NODE = Node String ATTR

和类型ATTR包含3个子类型如下:

  

Source Bool

     

Target Bool

     

Ghost Int

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将无限重复。

1 个答案:

答案 0 :(得分:1)

对于问题1,我会说使用像

这样的东西
data Attr = Attr (Maybe Bool) -- Source 
                 (Maybe Bool) -- Target 
                 (Maybe Bool) -- Ghost

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

的内容
data Graph = Graph [STMT]