Mon Apr 8 08:35:02 EDT 2019


So here's something to think about.  Contravariance is a very
important concept.

( See above, regarding the confusion about dropping the direction of
signal lines. )

A circuit is represented by I -> m O, where m is the DSL monad.

A consequence of this is that it is not possible for I and O types to
appear in the same (covariant) product type.  Basically, it makes no
sense to have a pair (I,O) appear anywhere.  The O is always
contravariant to I.

( I wish I had a better way to explain this without hand-waving. )

Summary: this is a roundabout way of saying: keep input and output
structures separated, and make them make sense at the lowset levels.
The rest will fall out by itself.