1 ///////////////////////////////////////////////////////////////////////////////
3 // This file implements the analysis and type inference methods for
4 // SETL-style collection types.
6 ///////////////////////////////////////////////////////////////////////////////
8 #include "collection.ph"
11 ///////////////////////////////////////////////////////////////////////////////
13 // Instantiate the collection type descriptor.
15 ///////////////////////////////////////////////////////////////////////////////
16 instantiate datatype CollectionDesc, List<CollectionDesc>;
18 ///////////////////////////////////////////////////////////////////////////////
20 // Functions for constructing some SETL-like type constructors.
22 ///////////////////////////////////////////////////////////////////////////////
24 { return TYCONty(COLtycon(COLdesc'{ name = "list" }), #[a]); }
27 { return TYCONty(COLtycon(COLdesc'{ name = "set" }), #[a]); }
30 { return TYCONty(COLtycon(COLdesc'{ name = "bag" }), #[a]); }
32 Ty mkmapty (Ty a, Ty b)
33 { return TYCONty(COLtycon(COLdesc'{ name = "bag" }), #[a,b]); }
35 Ty mkmultimapty (Ty a, Ty b)
36 { return TYCONty(COLtycon(COLdesc'{ name = "bag" }), #[a,b]); }
39 { return TYCONty(COLtycon(COLdesc'{ name = "bag" }), #[a]); }
41 Ty mkpriqueuety (Ty a)
42 { return TYCONty(COLtycon(COLdesc'{ name = "bag" }), #[a]); }
45 { return TYCONty(COLtycon(COLdesc'{ name = "bag" }), #[a]); }