0
我对Haskell的类型表达了两个问题:哈斯克尔类型的表达式
问题1 -
我想声明一个类型节点
data NODE = Node String ATTR
和类型属性包含3个子型如下:
来源布尔
目标布尔
鬼诠释
data ATTR = Source Bool | Target Bool | Ghost Bool
但上面的声明不符合该ATTR可以包含子类型,如的任何组合中的要求:
- ATTR可以同时包含Source Bool和Target Bool
- ATTR可以包含Source Bool,Target Bool和Gho ST诠释一次
- ATTR甚至可以是空的(仅仅包含)
问题2 -
我想声明一个类型图,其中的图可以含有1个或多个语句(STMTS),或者如果图表为空,则不包含语句。再次
data GRAPH = Graph String STMTS
data STMTS = STMT | STMTS
但是,正如你看到的递归数据类型支杆会重复infinitively:所以我声明如下。
这听起来像功课,所以这里有一些提示。 Q1:考虑使用“也许”。 Q2:您需要考虑列表的另一个定义:data NonEmptyList a = Single a |许多a(NonEmptyList a)。不要担心无限的数据结构; Haskell吃早餐。 –