use Function interface