Sat Dec 7 12:51:43 EST 2019

How to actually do that? Phantom types.

It seems like a good idea.  Abstract enough to be correct, but also
completely unusable without some concrete modeling ideas.

The essense is state machines.  So start there maybe?  A state machine
is something that transforms (event,state) into ([out_event],state).

Stick to single input, many output machines.  Capture multi-input in
the state.

EDIT: Focus on composition?  Given a low-level implementation /
specification pair, construct a way to compose them.

Also, the specifications give phantom types to the implementations.

The more I think about it this way, the easier it is to be ok with the
fairly simple "boring haskell" approach for Seq.  It really is just an
implementation language, and a phantom layer is all that's needed.

EDIT: The model doesn't need to be actual.  It can just be a
repackaging of input streams.  Where model "fit" is just the ability
to express pack/unpack of data?