opaque type definition, props