  extern "unify", unify
  extern "variable", (name)->new Variable(name)
  extern "rollback", rollback
- internal "Tin", Tin
- internal "Box", Box
- internal "DictFlag", DictFlag
- internal "toJson", toJson
- internal "Variable", Variable
+ extern "Tin", Tin
+ extern "Box", Box
+ extern "DICT_FLAG", DICT_FLAG
+ extern "toJson", toJson
+ extern "Variable", Variable

        return bind( t1, null, t2, changes )

# unification!
_unify = (n1,v1,n2,v2,changes=[]) ->
    return true if n1 == undefined and n2 == undefined
    return true if n1 == null and n2 == null

                return false if not _unify(n1[idx],v1,n2[idx],v2, changes)
    return true

rollback = (changes) ->
    for change in changes
        change()
