working on recursive types