diff --git a/arr.sml b/arr.sml
index f6640803205ab12364db0de562df059cb30829f6..23e66d652828e0177ad99195405e28d8352ed0a6 100644
--- a/arr.sml
+++ b/arr.sml
@@ -61,13 +61,13 @@   | str(Bx(s,a))   = "[" ^ str(a) ^ "]";
 (* return a string representation of the internal structure of an array *)
 fun tree a =
   let fun r s n = concat (List.tabulate (n, fn _ => s));
-  in let fun t (Zl)        n = (r "  " n) ^ "ZILDE"
-           | t (Lf(N(x)))  n = (r "  " n) ^ "LEAF: " ^ (Word8.fmt StringCvt.HEX x)
-           | t (Lf(FN(x))) n = (r "  " n) ^ "LEAF: Nilad" (* TODO: would be nice to get actual function names *)
-           | t (Lf(FM(x))) n = (r "  " n) ^ "LEAF: Monad"
-           | t (Lf(FD(x))) n = (r "  " n) ^ "LEAF: Dyad"
-           | t (Nd(x,y))   n = (r "  " n) ^ "NODE:\n" ^ (r "  " (n+1)) ^ (t x (n+1)) ^ ",\n" ^ (r "  " (n+1)) ^ (t y (n+1))
-           | t (Bx(x,y))   n = (r "  " n) ^ "BOX:\n" ^ (r "  " (n+1)) ^ (t y (n+1))
+  in let fun t (Zl)        n = (r " " n) ^ "ZILDE"
+           | t (Lf(N(x)))  n = (r " " n) ^ "LEAF: " ^ (Word8.fmt StringCvt.HEX x)
+           | t (Lf(FN(x))) n = (r " " n) ^ "LEAF: Nilad" (* TODO: would be nice to get actual function names *)
+           | t (Lf(FM(x))) n = (r " " n) ^ "LEAF: Monad"
+           | t (Lf(FD(x))) n = (r " " n) ^ "LEAF: Dyad"
+           | t (Nd(x,y))   n = (r " " n) ^ "NODE:\n" ^ (r " " (n+1)) ^ (t x (n+1)) ^ ",\n" ^ (r " " (n+1)) ^ (t y (n+1))
+           | t (Bx(x,y))   n = (r " " n) ^ "BOX:\n" ^ (r " " (n+1)) ^ (t y (n+1))
      in (t a 0) ^ "\n"
    end
   end;
@@ -112,18 +112,17 @@ fun reverse (Lf(x))   = Lf(x) (* FIXME: this doesn't behave properly, see str(take 0w4 (reverse (iota 0w8))); *)
   | reverse (Bx(s,a)) = Bx(s,a) (* TODO: boxing behaviour might be inconsistent across functions; check/correct asap before you get too deep into it *)
   | reverse (Nd(x,y)) = let fun r xs = case xs of [] => [] | (x::xs) => (r xs) @ [x]
                         in Array(r (leaves (Nd(x,y))))
-                        end; (* FIXME!! *)
+                        end;
 (* return the first n integers (zero-indexed) *)
 fun iota n =
   let fun i 0w0 = raise Index (* TODO: is this the right exception? *)
         | i 0w1 = Word(0w0)
-        | i n   = Nd(Word(n-0w1),(iota (n-0w1)))
+        | i n   = Nd(Word(n-0w1),(i (n-0w1)))
   in reverse (i n)
   end;
 (* fun addD(x,Lf(STOP)) = x (* dyadic add *)
   | addD(Lf(N(x)),Lf(N(y))) = Lf(N(x+y))
-  | addD(Nd(x,xs),Lf(N(y))) = Nd(Lf(N(x+y)),add(xs,Lf(N(y)))) (* FIXME: doesn't
-  work because x might be a Nd - need to do cases for Nd(Lf(N(x)),xs) &c. *) 
+  | addD(Nd(x,xs),Lf(N(y))) = Nd(Lf(N(x+y)),add(xs,Lf(N(y)))) (* FIXME: doesn't work because x might be a Nd - need to do cases for Nd(Lf(N(x)),xs) &c. *) 
   | addD(Lf(N(x)),Nd(y,ys)) = Nd(Lf(N(x+y)),add(Lf(N(x)),ys))
   | addD(Nd(x,xs),Nd(y,ys)) = raise NYI; (* TODO *) *)
 end;
