REVIEW: NOT FOR MERGE: Function types

This is NOT FOR MERGE. This is just to give a way to keep track of where things are at with this work.