@stephenjudkins @Hargreaves yeah! it'd be pretty rough to make myOpaqueInstance.asInstanceOf[Object].toString() not leak. but while scalac types the variable as MyOpqueType, i was a bit surprised that Object.toString was called in preference to extension (mot: MyOpaqueType) def toString() = ??? (which extension scalac was perfectly happy to let me define).