unleashing the potential of types and templates