Sat Apr 20 11:57:43 EDT 2019

The problem is commutation.

Think of it at this higher level, and things will open up.
Haskell is not a good substrate because it doesn't allow to express this.

You'll need to find a way to represent the higher level, and then
compile it to Haskell.  A meta step is essential here.  Dependent
types will help but it won't be accessible to you yet.

The next step is to just write down that damn exponential and stare at

EDIT: I have to learn how to organize type class hierarchies.
I.e. how they are derived.  I've just winged it up to now.  I need to
push through to really understand it before I get anywhere.

Here's an example of a clash I did not expect.

      Matching instances:
        instance Seq m r => Ring m (r S)
          -- Defined at ../deps/asm_tools/asm-tools-seq/Language/Seq/DSP.hs:55:10
        instance [safe] Ring m t => Ring m (C t)
          -- Defined at ../deps/asm_tools/asm-tools-seq/Language/Seq/Algebra.hs:96:10

The latter seems fine.  Is the former actually correct?  Maybe it is
the other way around?

Head starts hurting now...