Some of the limitations are:
- Higher order types are called 'Type' and have no further information.
- It does not seem possible to hold a type constructor (Like 'List') as a 'first class function' so that we could implement monads for example, for more information see page here:
http://www.euclideanspace.com/maths/standards/program/spad/category/monad/
- I think it would also be useful to have type aliases. It seems to me that the most common use of macros is to replace a long complicated type with something shorter and easier to read. However, macros can cause unexpected problems, also type aliases could be available to compiler for error messages and so on.