Sat Aug 18 10:09:04 EDT 2018


How to express this?  It is a set of integer equations, but using a
solver seems overkill.

This is a core issue.  In general I want to have equations between
types, not functions.

Here's a simple solution:

- for each binding, propagate to output and inputs until there is no
  more change

- another way, because these are trees the following terminates: pick
  a node with unknown type and re-root the tree, going downward.

But actually I'm too tired to think now so let's try a library.

This should have everything.

Actually I already have a unification algorithm: the netlist
execution.  No it's only half way: i/o function, no arbitrary

EDIT: monad-unify doesn't build:
Configuring monad-unify-0.2.2...
Setup: Encountered missing dependencies:
base >=4.5 && <4.8


What' I'm trying to do is simpler because of the way that register
types are always defined explicitly in the code using functional
dependencies.  So I should be able to just push it through that way.