Tue Jun 19 22:30:15 EDT 2018

Got it: existential + dynamic types

data type:
forall s. (s, s -> M (s, Dynamic))

interface function:
Typeable o => (s -> M (s, o)) -> s -> M o

So dynamic types are not visible outside of the implementation.

I'm happy with it.  Result is simple, though it was _not_ easy to
write this!  A couple of things need to come together without