implemented currying