anchor.diff:      | Const_bool(b) -> JSE_Bool(b)
       | Const_int32(n) -> JSE_Number((float)n)
       | Const_int64(n) -> JSE_Number((float)n)
  -    | Const_char(c) -> failwith "no chars..."
  +    | Const_char(c) -> JSE_String((string)c)
       | Const_float(f) -> JSE_Number(f)
       | Const_bytearray(ba,r) | Const_string(ba,r) -> JSE_String(Util.string_of_bytes ba)
   
  
positive.code:         match js_of_expr None e with JSE_Elision | JSE_Undefined -> None | e -> Some(e)
      ))])
  
  and js_of_app (e1:exp) (e2:exp) =
      let (e1,e2) = (Absyn.Util.compress_exp e1, Absyn.Util.compress_exp e2) in
      let nonstd e1 e2 = Util.print_any e1; JSE_Call(js_of_expr None e1, [js_of_expr None e2]) in
      match e1 with
      | Exp_fvar(x,b) -> (match x.v.str with
          | "Prims.op_Minus" -> JSE_Minus(js_of_expr None e2)
          | "Prims.op_Negation" -> JSE_Lnot(js_of_expr None e2)
          | _ -> nonstd e1 e2)
      | Exp_app(Exp_fvar(x,b), e3, f) ->
          (match x.v.str with
          | "Prims.op_Addition" -> JSE_Add(js_of_expr None e3, js_of_expr None e2)
          | "Prims.op_Subtraction" -> JSE_Sub(js_of_expr None e3, js_of_expr None e2)
          | "Prims.op_Multiply" -> JSE_Multiply(js_of_expr None e3, js_of_expr None e2)
          | "Prims.op_Modulus" -> JSE_Mod(js_of_expr None e3, js_of_expr None e2)
          | "Prims.op_Division" -> JSE_Divide(js_of_expr None e3, js_of_expr None e2)
          | "Prims.op_BarBar" -> JSE_Lor(js_of_expr None e3, js_of_expr None e2)
          | "Prims.op_AmpAmp" -> JSE_Land(js_of_expr None e3, js_of_expr None e2)
          | "Prims.op_GreaterThan" -> JSE_Gt(js_of_expr None e3, js_of_expr None e2)
          | "Prims.op_LessThanOrEqual" -> JSE_Le(js_of_expr None e3, js_of_expr None e2)
          | "Prims.op_LessThan" -> JSE_Lt(js_of_expr None e3, js_of_expr None e2)
          | "Prims.op_GreaterThanOrEqual" -> JSE_Ge(js_of_expr None e3, js_of_expr None e2)
          | "" -> JSE_Lor(js_of_expr None e3, js_of_expr None e2)
          | _ -> nonstd e1 e2)
      | _ -> nonstd e1 e2
  
  and js_of_binding (x:either<bvvdef,lident>, t:typ, e:exp) =
      let n = match x with Inl(x) -> x.ppname.idText | Inr(x) -> x.ident.idText in
  
negative.code: let rec js_of_singl (p:sigelt) : list<source_t> =
      match p with
      | Sig_let((isrec, bind),range) -> List.map (js_of_exports isrec) bind
      | Sig_bundle(defs, range) -> List.iter compile_def defs; []
      | _ -> []
  
  let js_of_fstar (m:modul) : Ast.t =
      (JS_Statement(JSS_Expression(JSE_Assign(JSE_Identifier(m.name.str),JSE_Object([])))))
          :: (List.map js_of_singl m.exports |> List.concat)
  
  let js_of_fstars (fmods : list<modul>) : Ast.t =
      let fmods = List.map js_of_fstar fmods in
      List.concat fmods
  
  
  
  