working on recursive type declarations