more type-stable constructors