Optics
如果您希望了解光学组件的概念,可以参考arxiv 2001.07488v3;
Lens
光学组件透镜。
Lens.of()
构造一个透镜。
- Type
- Details
第一个参数传入一个 getter 方法,第二个参数传入一个 setter 方法。
返回值为一个透镜。
- Example
js
Lens.of((s) => s.a, assoc('a'));Lens.of((s) => s.a, assoc('a'));Lens.bind()
直接将元素绑定在透镜。
- Type
Overload 1
Overload 2
- Details
Overload 1
传入一个元素的索引,返回一个绑定到该元素的透镜。
Overload 1
传入一个元素的属性路径,返回一个绑定到该元素的透镜。
js
Lens.bind('a');
Lens.bind(['a', 'b']);Lens.bind('a');
Lens.bind(['a', 'b']);view
返回一个数据结构中透镜聚焦的部分。
- Type
- Details
第一个参数传入一个透镜,第二个参数传入对应的数据结构。
返回值为该数据结构中透镜聚焦的部分。
- Example
js
const lens = Lens.bind('a');
view(lens, { a: 1 }); //1const lens = Lens.bind('a');
view(lens, { a: 1 }); //1set
对一个数据结构中透镜聚焦的部分的值进行设置。
- Type
- Details
第一个参数传入一个透镜,第二个参数传入需要设置为的目标值,第三个参数传入对应的数据结构。
返回值为该数据结构被设置完成的结果
- Example
js
const lens = Lens.bind('a');
set(lens, 2, { a: 1 }); //{ a: 2 }const lens = Lens.bind('a');
set(lens, 2, { a: 1 }); //{ a: 2 }over
对一个数据结构中透镜聚焦的部分的应用函数。
- Type
- Details
第一个参数传入一个透镜,第二个参数传入要应用的函数,第三个参数传入对应的数据结构。
返回值为该数据结构应用函数后的结果。
- Example
js
const lens = Lens.bind('a');
over(lens, add(1), { a: 1 }); //{ a: 2 }const lens = Lens.bind('a');
over(lens, add(1), { a: 1 }); //{ a: 2 }