Хабр Курсы для всех
РЕКЛАМА
Практикум, Хекслет, SkyPro, авторские курсы — собрали всех и попросили скидки. Осталось выбрать!
curried(a: 1)(b: 2)(c: 3);
curried(c: 3)(b: 2)(a: 1);
return a => b => c => function(a, b, c); частичное применение преобразует функцию с N параметрами в функцию с N-1 параметрами
val sample_function : int -> int -> int -> string = <fun>(* принимаем на вход имя файла, тип сообщения и сообщение *)
# let logger filename level message = (* здесь логика вывода сообщения в файл *);;
val logger : string -> int -> string -> unit = <fun>
# let business_logger = logger "business.log";; (* Функция, которая принимает уже только два параметра и пишет в лог*)
val business_logger : int -> string -> unit = <fun># let partial_apply func x = func x;; (* Функция, которая применяет параметр x в качестве первого параметра *)
val partial_apply : ('a -> 'b) -> 'a -> 'b = <fun>
# let business_logger = partial_apply logger "business.log";;
val business_logger : int -> string -> unit = <fun>//Фиксируем 1 и 3 параметры
def infoLogger = logger("some.log", _, LogLevel.Info, _);
infoLogger(LogCategory.GUI, "message");
infoLogger(LogCategory.DB, "other message");
Карринг vs Частичное применение функции