timzaak / blog

8 stars 1 forks source link

Typelevel 三大件 #35

Closed timzaak closed 5 years ago

timzaak commented 5 years ago

Cats 是 Typelevel 出品的函数式编程 Scala 库(有些大神认为它提供了更好的语法糖,让代码写得更顺畅)。

Cat Effect 主要针对异步、同步、定时、Fiber 等并发编程场景提供统一抽象和实现。

monix 在 cats effect 的基础上,处理发布订阅,同时引入了 pipe 概念(相关文档缺乏,可期望 graph 抽象),期待 3.0 stable

timzaak commented 5 years ago

Cats 最近尝试想用它到生产代码中,首先最眼馋的是 mapN 函数,但发现它的适用范围还是窄。对类型还是有一些要求。 例如:

(_:Either[A1<:A,B],_:Either[A2<:A,C]).mapN(???)  // 这是通不过编译的
(_:Either[A,B],_:Either[A,C]).mapN(???) // Ok

然后再思考还有哪些地方适合用 Cats 处理。 目前除了 [F[_],A,?] [F[_],G[_],A] [F[_],G[_],?] 这种类型签名的以外,竟再想不起有哪些适合用的。而这种类型签名的,基本上底层抽象库会出现,应用层没发现有哪些地方会需要用到。至于函数组合类的,一些隐式转换 + 自带的 andThen,compose 也就差不多了,就是可能丑点,另外 very-util-lang 里面还有 and toCase 等,完全够用。 所以大神认为 Cats 提供了一些语法糖,我现竟无法反驳。 当然 EVal 的存在挺好的,可以解决好初始化,依赖问题。相关抽象在Cats-effects Monix 都存在。

Monix 目前是围绕单机设计的。如果是多机的,信息源要自行保证很多东西,中间数据跨机共享也是要自行搞定。那这样的话,我真不如搞 Flink、Spark。

timzaak commented 4 years ago

现在又蹦出来 ZIO。感觉 ZIO 的抽象,更好一些。后面会 Focus 在它身上,如果有需要的话。