#category-theory #monads #tagless #free-monads #monad-transformers

algar

代数结构、高阶类型以及其他范畴论不良想法

7个不稳定版本 (3个破坏性更新)

0.4.1 2023年3月22日
0.4.0 2023年3月21日
0.3.1 2023年1月26日
0.2.1 2023年1月20日
0.1.0 2023年1月17日

#835 in Rust模式

每月44次下载

MIT许可证

50KB
1K SLoC

Algar

Crates.io Build docs-badge

代数结构、高阶类型以及其他范畴论不良想法。

是的,你将在Rust中轻松访问泛化functorsapplicativesmonadstraversablefree monads等等。但它们并不像Haskell中那样直观和美观,主要是因为Rust类型系统中缺乏高阶类型。

在示例部分,你还可以找到我在Rust中解决表达式问题的看法:我们从基本(错误)的实现开始,然后通过尝试实现functors的coproductfinal tagless encoding来寻找解决方案。

为什么?

我写这个库有两个原因:首先,主要是作为一个学习范畴论Rust的游乐场;其次,看看是否能够在Rust中实现这样通用的抽象废话。

范畴论能使你成为一名更好的程序员吗?

我认为它可以。范畴论围绕着抽象组合,我将强烈论证抽象和组合是编程的精髓。

抽象

抽象是计算机科学的核心,在日常编程中尤为重要:学习这类数学可以使你解锁更高层次的抽象。

由于范畴论是数学中最抽象的分支,它自然适用于编程中的抽象,进而产生极其有用的编程思想。Haskell程序员已经利用这种资源很长时间了,这些思想正在渗透到其他语言中。

组合

所有软件开发都是组合。将复杂问题分解为更小的部分,然后将这些较小的解决方案组合起来形成结构和模式,即你的应用程序,这就是编程的全部。

我们从很久以前就开始编写东西了,甚至在伟大的工程师想出子程序这个想法之前。很久以前,结构化编程的原则通过使代码块可组合而彻底改变了编程。然后出现了面向对象的编程,它全部都是关于对象的可组合性。函数式编程不仅关于函数和代数数据结构的组合——它使得并发可组合——这是其他编程范式几乎无法实现的。 —— 巴托什·米列夫斯基

想要了解更多吗?

我强烈推荐

浏览这些资源可能不会一夜之间改变你的代码。有些人称它为一般抽象理论是有原因的。尽管如此,它确实为思考这些抽象概念提供了一个很好的框架,并且对所有好奇的人来说都是一项值得追求的研究。

现有技术

这个库受到了数学和其他Rust和Elixir库的深刻启发:让我在这里提一下。

Witchcraft Elixir库是为什么我开始这段旅程的原因。

The Fantasy Land Spec 是针对类似这个项目的项目的规范,但针对的是JavaScript。它没有自己的实现,但提供了一张有用的类层次图

Scala Cats 库有很好的文档,并且在范畴论的一些概念上非常有启发性。

Fp-core.rshigher 对我帮助很大,帮助我将范畴论的概念移植到Rust中。

显然,Haskell的Prelude 应该被提及。Haskell已经激发了无数程序员基于原则抽象写出干净、声明式、函数式代码。

无运行时依赖