The thing that really strikes in redo is the way in which an imperative update function is given the "ownership" of the output node. Basically, it can do what it wants with that piece of storage while it is running. It is very nice to have this high level guard around a dirty, in-place imperative update. Write a C version? Since I have the example, what would that look like?