functional programming principles 3695535