types and macros