anchor.diff:  (*
    * Starling imperative language semantics
    *)
  -let prim (name : string) (results : TypedVar list) (args : TypedVar list)
  +
  +/// Creates a prim from a name, results list, and arguments list.
  +let mkPrim (name : string) (results : TypedVar list) (args : TypedVar list)
     (body : Microcode<TypedVar, Var> list)
     : PrimSemantics =
       { Name = name; Results = results; Args = args; Body = body }
  
positive.code:        *)
  
        // Identity
        (prim "Id" [] [] [])
  
        // Assume
        (prim "Assume" [] [Bool "expr"] [ Microcode.Assume (BVar "expr") ]) ]
  
  (*
   * Expression translation
  
negative.code:                  [ Assign (Int "destA", Int (IVar "destB"))
                     Assign (Int "testA", Int (IVar "destB")) ] ) ] )
        // Boolean CAS
        (mkPrim "BCAS" [ Bool "destA"; Bool "testA" ] [ Bool "destB"; Bool "testB"; Bool "set" ]
             [ Branch
                  (bEq (BVar "destB") (BVar "testB"),
                   [ Assign (Bool "destA", Bool (BVar "set"))
  