tostr works recursively but the way it is represented isn't great, will fix this later