Как кодировать отложенный тип с церковью?

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

Решение

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

Другие вопросы по тегам