If you have a discrete data structure (say a tree), and you want to make a small change to it (i.e. insert a node at some location), it turns out that the original datatype can be described as a function, and the "small change" datatype is the derivative of the original datatype's function, that you can calculate with the usual rules for derivatives. The original article is here:
and it's been extended in various ways since then. Amazing stuff.