anchor.diff:              match templateArgs with
               | None -> unwrap recordTy
               | Some args -> TyApply {tyConstructor=recordTy; args=args}*)
  -        output "(([&]() -> " + compileType ty + output "{" + newline() + indentId() +
  +        output ("((" + capture + "() -> ") + compileType ty + output "{" + newline() + indentId() +
           compileType ty + output " " + output retName + output ";" + newline() +
           (initFields |> List.map (fun (fieldName, fieldExpr) ->
                                           output retName + output "." + output fieldName + output " = " + compile fieldExpr + output ";" + newline()) |> String.concat "") +
  
positive.code:             failwith "This should never happen"
  
  // Converts left side of a variable assignment to the C++ representation.
  and compileLeftAssign theta kappa (left : LeftAssign) : string =
      let compileLeftAssign = compileLeftAssign theta kappa
      let compile = compile theta kappa
      match left with
      | VarMutation varName ->
          output varName
  
negative.code:     | Choice1Of2 name -> output name
      | Choice2Of2 {module_=module_; name=name} -> output module_ + output "::" + output name
  
  // Technically "compile expression"--converts an expression in Juniper to the C++ representation
  // topLevel determines if the expression is being compiled at the top level of a C++ module
  // for the purpose of determining whether or not C++ lambdas should capture anything.
  // topLevel is needed since capturing by reference (&) in the right hand side of an assignment
  // expression is not allowed.
  and compile theta kappa (topLevel : bool) ((_, ty, expr) : TyAdorn<Expr>) : string =
      let compile = compile theta kappa false
      let compileType = compileType theta kappa
      let compileCap = compileCap kappa
      let compileLeftAssign = compileLeftAssign theta kappa topLevel
      let unitty = TyCon <| BaseTy TyUnit
      let capture = if topLevel then "[]" else "[&]"
      match expr with
      | StringExp str ->
          output (sprintf "((const PROGMEM char *)(\"%s\"))" str)
  