【猫谈】课程 - 八&九月份 Cat Talks 汇总

avatar
HR @Tubi

8 月 19 日,主题:Lens,演讲者:Tristen

故事从 Traversable 这种我们编程中常见的模式讲起,在 Traversable 中,最有趣的函数是 traverse,它的类型是 Applicative f => (a -> f b) -> t a -> f (t b)。如果把这里的 t a/t b 放宽为任意两个 type,那么我们就能得到 Traversal 的定义 Applicative f => (a -> f b) -> s -> f t。这个类型的输入和输出形状很相似,如果有多个 Traversal,并且对得上 a/b/s/t,那么他们就可以被组合成一个 Traversal。这样一来,Traversal 的组合就是函数的组合。Tristen 讲解了怎么一步步从 Getter, Setter, Fold 一步步放松高阶类型 f 的条件,最终推导出“可 Get 可 Set 可组合”的 Lens 类型。

8 月 27 日,主题:CPS transformation,演讲者:Xinyuan

在以前的 Cat talks 我们已经有了两三次关于 Continuation 的分享了,这次的分享主要内容是 Continuation-Passing Style (CPS) Transformation 的工作原理。CPS transform 有很多作用,是很多编译器实现中的一步。譬如说,CPS 能够将代码的执行顺序显式地确定下来,近一步方便生成中间代码,可以看作是函数式语言转换到类汇编语言过程中的一座桥梁。这次分享的内容中,我演示了在一套简化的 Lisp 语言上原始地实现 CPS transformation 的算法。然后我们进一步学习了一些能够让 CPS transformer 生成更简短代码的技巧,另外我们还赏析了王垠先生得意的“40行代码”。

9 月 16 日,主题:F-algebra (1/2),演讲者:Xinyuan

这次的主题是带着半复习的目的讲解了 F-algebra 这个范畴论中的概念。这个主题很适合有编程基础的范畴论初学者学习。F-algebra 中的 (Carrier type, Evaluator) 是我们在编程中也时常使用的模式,而这次我们学习了怎么形式化这样的概念,怎么定义 F-algebra 之间的 Homomorphism,近一步定义出 F-algebra 的范畴。有了定义好的范畴,我们就可以问一些问题了,譬如说这个范畴中的 Initial object 是什么?答案可能有些出乎意料——是我们日常都会接触到的递归数据类型。

9 月 30 日,主题:F-algebra (2/2),演讲者:Xinyuan

为什么说 F-algebra 是递归和归纳的基础?紧接着上次的内容,这次我们更深入地讲解了 Catamorphism(the unique factorization from initial algebra to any algebra)在不同 Initial algebra 中扮演的角色。我们从编程的角度解释了 Nat 这个 Initial algebra 对应的 catamorphism 其实就是“迭代”,而 List[Int] 这个 Initial algebra 对应的 catamorphism 则是我们很常用的“Fold”。进一步地,我们解释了给定一个满足条件的 Functor 该怎么找到其对应的 Initial algebra(Adámek’s algorithm)。基于 Lambek’s theorem,Initial algebra 的 evaluator 一定是一个 isomorphism,这就提供了我们足够的条件来找到任何 Initial algebra 对应的 catamorphism。

To Be Continued

视频请到 B 站“比图科技”用户下观看,也非常欢迎对该系列话题感兴趣的伙伴加入我们的猫谈讨论,具体可联系 t****ina@tubi.tv

图片

作者:Xinyuan Zhang, Tubi Backend Engineer

图片