add functional.h