С помощью функций мы можем абстрагироваться от любого типа. Вот пример типа Option
:
const Some = x => y =>
k => k(x);
const None = y =>
k => y;
const sqr = n => n * n;
const run = f => t => t(f);
const x = Some(5) (0),
y = None(0);
run(sqr) (x); // 25
run(sqr) (y); // 0
Теперь я хочу закодировать отложенный тип, чтобы получить ленивый эффект в Javascript. Но я не знаю правильного подхода и имеет ли смысл такое усилие с церковным кодированием. Вот мой первый снимок:
const Deferred = thunk =>
k => k(thunk());
const inc = n => n + 1;
const sqr = n => n * n;
const run = f => t => t(f);
const x = Deferred(() => inc(4));
run(sqr) (x); // 25
Я здесь совершенно в темноте. Приводит ли этот подход к чему-либо значимому?
None(0)
выглядит неправильно. Я бы предпочел ожидать что-то вродеrun(sqr)(None)(0)
/run(sqr)(Some(5))(0)
или дажеrun(sqr)(0)(…)
. - person Bergi   schedule 24.11.2018None(0)
неправильно, вместоrun(sqr) (0) (Some(5))
, как вы сказали. - person   schedule 24.11.2018fold
/uncons
.Deferred
- это просто функция в стиле передачи продолжения. - person   schedule 24.11.2018