@@ -246,9 +246,12 @@ bool asubtype(\asyntaxRoleModifier(SyntaxRole role, \aparameter(_,_)), aadt(_, _
246246// All open syntax role modifiers are sub-types of `node`
247247bool asubtype (\asyntaxRoleModifier (SyntaxRole role , \aparameter (_,_)), anode (_)) = true ;
248248
249+ @synopsis {These are the roles for values of the Tree type}
250+ private set [SyntaxRole ] treeSyntaxRoles = {contextFreeSyntax (), lexicalSyntax (), keywordSyntax (), layoutSyntax ()};
251+
249252// All context-free grammar-related syntax roles are sub-types of `Tree`
250253bool asubtype (\asyntaxRoleModifier (SyntaxRole role , \aparameter (_,_)), aadt ("Tree" , [], dataSyntax ())) = true
251- when role in { contextFreeSyntax (), lexicalSyntax (), keywordSyntax (), layoutSyntax ()} ;
254+ when role in treeSyntaxRoles ;
252255
253256bool asubtype (\start (AType a ), AType b ) = asubtype (a , b );
254257
@@ -562,12 +565,6 @@ bool outerComparable1(aparameter(str pname1, AType bound1), aparameter(str pname
562565
563566bool outerComparable1 (aadt (str adtName1 , list [AType ] parameters1 , SyntaxRole syntaxRole1 ), areified (_)) = true ;
564567
565- // syntax role with incomparable roles are not outer comparable, but otherwise they act like aadt's:
566- // JV: commented out until I understand the use of outerComparable1 better.
567- // bool outerComparable1(asyntaxRoleModifier(SyntaxRole role, aparameter(_,_)), asyntaxRoleModifier(role, aparameter(_,_))) = true;
568- // bool outerComparable1(asyntaxRoleModifier(SyntaxRole role, aparameter(_,_)), aadt(_,_,role)) = true;
569- // bool outerComparable1(aadt(_,_,role), asyntaxRoleModifier(SyntaxRole role, aparameter(_,_))) = true;
570-
571568default bool outerComparable1 (AType l , AType r ) {
572569 return comparable (l , r );
573570}
@@ -751,11 +748,11 @@ AType alub(\anode(l), \asyntaxRoleModifier(_, \aparameter(_, _))) = \anode(l);
751748
752749AType alub (\asyntaxRoleModifier (SyntaxRole role , \aparameter (_, _)), aadt ("Tree" ,[], dataSyntax ()))
753750 = aadt ("Tree" ,[], dataSyntax ())
754- when role in { contextFreeSyntax (), lexicalSyntax (), keywordSyntax (), layoutSyntax ()} ;
751+ when role in treeSyntaxRoles ;
755752
756753AType alub (aadt ("Tree" ,[], dataSyntax ()), \asyntaxRoleModifier (SyntaxRole role , \aparameter (_, _)))
757754 = aadt ("Tree" ,[], dataSyntax ())
758- when role in { contextFreeSyntax (), lexicalSyntax (), keywordSyntax (), layoutSyntax ()} ;
755+ when role in treeSyntaxRoles ;
759756
760757// ---
761758
@@ -767,7 +764,7 @@ AType alub(\asyntaxRoleModifier(SyntaxRole _, \aparameter(x, _)),
767764
768765AType alub (\asyntaxRoleModifier (SyntaxRole a , \aparameter (x , _)),
769766 \asyntaxRoleModifier (SyntaxRole b , \aparameter (y , _))) = aadt ("Tree" ,[], dataSyntax ())
770- when x != y , {a ,b } < { contextFreeSyntax (), lexicalSyntax (), keywordSyntax (), layoutSyntax ()} ;
767+ when {a ,b } < treeSyntaxRoles ;
771768
772769AType alub (l :\achar -class (_), r :\achar -class (_)) = union (l , r );
773770
@@ -945,10 +942,10 @@ AType aglb(a:asyntaxRoleModifier(SyntaxRole _, aparameter(_,_)), \anode(_)) = a;
945942AType aglb (\anode (_), a :asyntaxRoleModifier (SyntaxRole _, aparameter (_,_))) = a ;
946943
947944AType aglb (a :asyntaxRoleModifier (SyntaxRole role , aparameter (_,_)), aadt ("Tree" , [], dataSyntax ())) = a
948- when role in { contextFreeSyntax (), lexicalSyntax (), keywordSyntax (), layoutSyntax ()} ;
945+ when role in treeSyntaxRoles ;
949946
950947AType aglb (aadt ("Tree" , [], dataSyntax ()), a :asyntaxRoleModifier (SyntaxRole role , aparameter (_,_))) = a
951- when role in { contextFreeSyntax (), lexicalSyntax (), keywordSyntax (), layoutSyntax ()} ;
948+ when role in treeSyntaxRoles ;
952949
953950public list [AType ] aglbList (list [AType ] l , list [AType ] r ) = [aglb (l [idx ],r [idx ]) | idx <- index (l )] when size (l ) == size (r );
954951public default list [AType ] aglbList (list [AType ] l , list [AType ] r ) = [avalue ()];
0 commit comments