Support recursive types

Currently, this can overflow.