3 个不稳定版本
0.2.0 | 2023 年 1 月 18 日 |
---|---|
0.1.1 | 2019 年 8 月 7 日 |
0.1.0 | 2019 年 2 月 26 日 |
#693 在 数据结构
49KB
1.5K SLoC
higher
Rust 的泛函层次结构和其他可怕的想法。
是的,这为您提供了 Rust 中的可泛化的单子。不,它们与 Haskell 相比并不太令人愉快,因为 Rust 的函数在类型系统中的第一类特性并不像您期望的那样,在 trait 实现中的类型约束在实现,例如为 HashSet
实现 Functor
时可能会成为严重的头痛,并且类型系统有时可能会非常晦涩,并且需要大量的额外和极其冗长的指导才能正确进行类型推断,但它们现在存在。
您从这得到什么
- 一组细粒度的 trait(
Functor
、Pure
、Apply
、Bind
、Applicative
和Monad
),用于泛函、适用性和单子,灵感来源于 PureScript 和 Scala 的 Cats。 - 双泛函、逆变泛函和 profunctor,以示完整。
- 用于 Haskell 风格 do 表达式的
run!
宏。我本来希望将其称为do!
或for!
,但不幸的是,这些甚至是保留关键字,即使是对于宏。 - 为
Functor
和Bifunctor
提供推导宏。 - 半群和幺半群,以防万一。
- 包装标准
Future
的效应单子和包装可能失败的未来的 IO 单子。 - 大部分
Foldable
,并计划添加一些Traversable
的特性。(它总是traverse
。) - 环和代数,以防万一。
- 可能没有很多很好的文档,但就像任何好的 Haskell 程序员一样,您应该能够立即从函数的类型签名中推断出每个函数的目的。
您对此有何打算?
我写这个有两个原因:首先,看看这是否可行;其次,作为一条极富创意的屎尿屁帖子。如果你认为这实际上有用(而且我有点惊恐地发现我开始这么想了),你可能想加入进来帮助维护它,因为我怀疑一旦新鲜感过去,我就不会再给予太多关注。
许可证
版权所有 2019 Bodil Stokke
此软件受Mozilla公共许可证第2.0版条款约束。如果此文件未附带Mozilla公共许可证副本,您可以在http://mozilla.org/MPL/2.0/获取一个。
行为准则
请注意,此项目附带贡献者行为准则。通过参与此项目,您同意遵守其条款。
依赖关系
~1.2–1.6MB
~39K SLoC