Partial function application is calling a function with some number of arguments, in order to get a function back that will take that many less arguments.
Currying is taking a function that takes n arguments, and splitting it into n functions that take one argument.
a = proc { |x| proc { |y| proc { |z| x + y + z } } }
b = a.call(1)
#-> #<Proc:0x000055840ba2a9b0@(irb):23>
c = b.call(2)
#-> #<Proc:0x000055840b9f6d90@(irb):23>
c.call(3)
# 6
# Curring -
a.curry[1][2]
#-> #<Proc:0x000055840b8a8a10@(irb):23>
a.curry[1][2][4]
# 7