type signatures with existentially quantified data constructors