try to give a better functional demo