type_erasure and Val, first draft