如何使用 Church 对延迟类型进行编码?
How to encode a Deferred type with Church?
使用函数我们可以从任何类型中抽象出来。这里以 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 中的惰性效果。但我不知道正确的方法,也不知道这种努力是否对 Church Encoding 有意义。这是我的第一张照片:
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
我在这里一无所知。这种方法有什么意义吗?
Church 编码(更准确地说,是 Scott 编码)提供了一种在数据类型中对具有不同情况(例如实例构造函数)的分支进行编码的方法。然而,您的 Deferred
类型是一个函数的(新类型)包装器,它需要一个延续,没有多个案例要编码。我不认为你可以在这里应用这个概念。
使用函数我们可以从任何类型中抽象出来。这里以 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 中的惰性效果。但我不知道正确的方法,也不知道这种努力是否对 Church Encoding 有意义。这是我的第一张照片:
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
我在这里一无所知。这种方法有什么意义吗?
Church 编码(更准确地说,是 Scott 编码)提供了一种在数据类型中对具有不同情况(例如实例构造函数)的分支进行编码的方法。然而,您的 Deferred
类型是一个函数的(新类型)包装器,它需要一个延续,没有多个案例要编码。我不认为你可以在这里应用这个概念。