• 喵喵喵幼儿园git服务
Sign inSign up
Watch1
Star10
Fork1
Branch: master
Switch branches/tags
Branches
Tags
  • master
  •  
Caviar-X / lens是个啥.md
移动浏览
加载中...
到移动设备上浏览
13 lines 1.13 KB
First commit on 1 Dec 2022

    lens是“一等公民形式”的“对数据类型的某个局部的引用”

    type X = [getter: (a:A) => X ,setter(new_x : X,a : A) => A]
    

    Q: 为什么用函数?

    A: 此时函数是一等公民,便于compose

    lens可以写成van Laarhoven lens

    type Lens a b =
    	forall f. Funtor f =>
    	(b -> f b) -> a -> f a
    

    Lens a b是个function 对于所有的Functor f 它接受一个(b-> f b)函数作为参数 返回一个(a->f a)的函数 由于forall,你把f取成Const a 他就是getter,你把f取成Identity 他就是setter

    这个形式的好处是 你会发现lens composing就是function composing,你可以直接用(.)来复合两个lens