// p≡p API Y language // Copyleft (c) 2019-2020, p≡p foundation // this file is under GNU General Public License 3.0 // see LICENSE.txt // written by Volker Birk and Nana Karlstetter // typekind // -------- // typekinds are all idl defined // typekinds can be used to create user defined types // a basetype can be specialized // an enum-type can be defined using items // a struct-type can be defined using fields // a list can be defined holding a type T, where T can be any defined type // types // ----- // types are either: // * idl-defined // * basetypes // * user-defined // * deftype // * enum // * struct // * list // * undefined // any defined type can be instantiated. // Generic types // generic typeskinds list, pair, set // can only be used to define types // they can not be used as types (e.g. in params, fields) idl { typekinds { basetype; deftype; enum; struct; generics { list; pair; set; } } basetypes { string; // text // p≡p engine uses UTF-8 strings which are NFC normalized. // Cf. https //dev.pep.foundation/Engine/Basic%20Concepts%20of%20the%20pEp%20Engine binary; // binary data int; // signed integer number uint; // unsigned integer number size; // size in memory bool; // true or false // timestamp; // point of time opaque; // opaque type (was: 'any') } } decl package @name; decl api @name; // deftype decl deftype @name; decl as @type; // enum decl enum @name; decl item @name; // struct decl struct @name; decl field @type @name; // optional: function=free for a free function // method decl method @name; decl param @mode @type @name; decl throws @name; // TODO: implement //----------------- // decl flag @name; // decl protocol @name;