Как кодировать отложенный тип с церковью? - PullRequest
0 голосов
/ 24 ноября 2018

С помощью функций мы можем абстрагироваться от любого типа.Вот тип 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

Я здесь полностью в темноте.Приводит ли этот подход к чему-либо значимому?

1 Ответ

0 голосов
/ 24 ноября 2018

Церковное кодирование (а точнее, кодирование Скотта) обеспечивает способ кодирования ветвления в типе данных с различными случаями (например, конструкторами экземпляров).Ваш тип Deferred, тем не менее, является (новым типом) оберткой над функцией, которая принимает продолжение, нет нескольких случаев для кодирования.Я не думаю, что вы можете применить эту концепцию здесь.

...