3 Static Types
In this and subsequent syntax specifications, changes to specifications as described in section 2 are in boldface.decl ::= let_decl | tp_decl | type_ext_decl | object_decl | obj_ext_decl| predicate_decl| disjoint_decl | cover_decl | divide_decl| signature_decl | method_decl| field_sig_decl | field_decl | precedence_decl | include_decl | prim_decl
The following example illustrates some of the extensions:
objectlist;methodis_empty(l@:list):bool { l.length = 0 }signaturelength(l:list):int;signaturedo(l:list, closure:&(int):void):void;signaturepair_do(l1:list, l2:list, closure:&(int,int):void):void;methodprepend(x:int, l@:list):list {object inheritscons { head := x, tail := l } }methodcopy_reverse(l:list):list {letvarl2:list := nil; do(l, &(x:int){ l2 := prepend(x, l2); }; l2 }representationconsisalist;fieldhead(@:cons):int;fieldtail(@:cons):list;
Generated with Harlequin WebMaker