   else
     ast
 
+printIr = (ast) ->
+  walkIr ast, (ast) ->
+    args = {}
+    for name, node of ast
+      args[name] =
+        if node?
+          if name in ['js', 'ir'] then true else printIr node
+        else
+          undefined
+    args
 
 jsAccess = (lhs, name) ->
   {js: jsAccessTranslate, lhs, name}

    .replace(/\</g, 'lt_')
    .replace(/\>/g, 'gt_')
    .replace(/\~/g, 'neg_')
    # .replace(/\√/g, 'sqrt_')
    # .replace(/\./g, 'dot_')
    .replace(/\&/g, 'and_')

      lhsCompiled)
    elemType = ctx.freshTypeVariable star
    # TODO use (Seq c e) instead of (Array e)
    form.tea = new Constrained (concatMap _constraints, (tea for {tea} in elems)),
      new TypeApp listType, elemType

    for elem in elems
