Add support for recursive types