sig
  val swap_variable : string -> string -> Lang.expression -> Lang.expression
  exception TraversalError
  val flatten : Lang.expression list -> Lang.expression list
  val num_exprs : Lang.expression list -> int
  val traverse : Lang.expression list -> int -> Lang.expression
  type replace_opts = {
    expr : Lang.expression;
    desired : Lang.expression;
    pos : int;
  }
  val replace : Transform.replace_opts -> Lang.expression
  type abstract_opts = { expr : Lang.expression; name : string; pos : int; }
  val abstract : Transform.abstract_opts -> Lang.expression
end