给Rascal中的复合类型命名(la typedef)

时间:2016-09-21 11:51:06

标签: typedef rascal

在Rascal中,如何为复合类型引入一个名称(由内置基本类型和类型构造函数构建,如list和map)? 例如。我想做像

这样的事情
typedef IntList = list[int];
typedef StrToIntList = map[str,IntList];
StrToIntList mymap = ();

1 个答案:

答案 0 :(得分:2)

您可以使用typedef代替alias。例如:

rascal>alias IntList = list[int];
ok
rascal>alias StrToIntList = map[str,IntList];
ok
rascal>StrToIntList mymap = ();
StrToIntList: ()

您也可以使用alias为现有的基本类型提供替代名称,因此您也可以执行以下操作:

alias ID = int;

并且,如果需要,您可以包含类型参数,因此任意类型的图形可以定义为:

alias Graph[&T] = rel[&T,&T];

请注意,alias引入了类型等价而不仅仅是子类型。因此,对于任何接受别名作为参数类型的函数,您还可以提供其别名或其任何子类型的类型的值。