Mon Apr 8 08:35:02 EDT 2019
So here's something to think about. Contravariance is a very
( 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.