As shown below, in Haskell, it\'s possible to store in a list values with heterogeneous types with certain context bounds on them:
data ShowBox = forall s. S
Why not:
trait ShowBox { def show: String } object ShowBox { def apply[s](x: s)(implicit i: Show[s]): ShowBox = new ShowBox { override def show: String = i.show(x) } }
As the authorities' answers suggested, I'm often surprised that Scala can translate "Haskell type monsters" into very simple one.