more type requirement relaxation, yet with type declarations