Mon May 21 12:13:13 EDT 2018

Monadic assembly language

What I want:

- convert assembly program to trace, to allow timing validation
- have something that looks like assembly as the "user interface"

This is what it should look like:

test :: m ()
test = do
  mov r10 r11

Assembly instructions do not return a value, so the type is just the
monad in which it is evaluated.  Essentially, a variant of a writer

Arguments do return a value, which is the reference to be passed to
the implementation of mov.

r10 :: m r

Where r is to be determined, representing some kind of argument.  This
leads to the type

mov :: m r -> m r -> m ()

To translate this to r -> r -> m(), it a default evaluation order is

mov a b = do
    ra <- a
    rb <- b
    mov' ra rb

mov' :: r -> r -> m ()

This should provide enough of a skeleton.