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次下载
50KB
1K SLoC
Algar
代数结构、高阶类型以及其他范畴论不良想法。
是的,你将在Rust中轻松访问泛化functors
、applicatives
、monads
、traversable
、free monads
等等。但它们并不像Haskell中那样直观和美观,主要是因为Rust类型系统中缺乏高阶类型。
在示例部分,你还可以找到我在Rust中解决表达式问题的看法:我们从基本(错误)的实现开始,然后通过尝试实现functors的coproduct
和final tagless encoding
来寻找解决方案。
为什么?
我写这个库有两个原因:首先,主要是作为一个学习范畴论和Rust的游乐场;其次,看看是否能够在Rust中实现这样通用的抽象废话。
范畴论能使你成为一名更好的程序员吗?
我认为它可以。范畴论围绕着抽象和组合,我将强烈论证抽象和组合是编程的精髓。
抽象
抽象是计算机科学的核心,在日常编程中尤为重要:学习这类数学可以使你解锁更高层次的抽象。
由于范畴论是数学中最抽象的分支,它自然适用于编程中的抽象,进而产生极其有用的编程思想。Haskell程序员已经利用这种资源很长时间了,这些思想正在渗透到其他语言中。
组合
所有软件开发都是组合。将复杂问题分解为更小的部分,然后将这些较小的解决方案组合起来形成结构和模式,即你的应用程序,这就是编程的全部。
我们从很久以前就开始编写东西了,甚至在伟大的工程师想出子程序这个想法之前。很久以前,结构化编程的原则通过使代码块可组合而彻底改变了编程。然后出现了面向对象的编程,它全部都是关于对象的可组合性。函数式编程不仅关于函数和代数数据结构的组合——它使得并发可组合——这是其他编程范式几乎无法实现的。 —— 巴托什·米列夫斯基
想要了解更多吗?
我强烈推荐
浏览这些资源可能不会一夜之间改变你的代码。有些人称它为一般抽象理论是有原因的。尽管如此,它确实为思考这些抽象概念提供了一个很好的框架,并且对所有好奇的人来说都是一项值得追求的研究。
现有技术
这个库受到了数学和其他Rust和Elixir库的深刻启发:让我在这里提一下。
由Witchcraft
Elixir库是为什么我开始这段旅程的原因。
The Fantasy Land Spec
是针对类似这个项目的项目的规范,但针对的是JavaScript。它没有自己的实现,但提供了一张有用的类层次图。
Scala Cats
库有很好的文档,并且在范畴论的一些概念上非常有启发性。
Fp-core.rs
和 higher
对我帮助很大,帮助我将范畴论的概念移植到Rust中。
显然,Haskell的Prelude
应该被提及。Haskell已经激发了无数程序员基于原则抽象写出干净、声明式、函数式代码。