3 个不稳定版本

0.2.0 2023 年 1 月 18 日
0.1.1 2019 年 8 月 7 日
0.1.0 2019 年 2 月 26 日

#693数据结构


用于 4 个 crate (3 个直接)

MPL-2.0+

49KB
1.5K SLoC

higher

Rust 的泛函层次结构和其他可怕的想法。

是的,这为您提供了 Rust 中的可泛化的单子。不,它们与 Haskell 相比并不太令人愉快,因为 Rust 的函数在类型系统中的第一类特性并不像您期望的那样,在 trait 实现中的类型约束在实现,例如为 HashSet 实现 Functor 时可能会成为严重的头痛,并且类型系统有时可能会非常晦涩,并且需要大量的额外和极其冗长的指导才能正确进行类型推断,但它们现在存在。

您从这得到什么

  • 一组细粒度的 trait(FunctorPureApplyBindApplicativeMonad),用于泛函、适用性和单子,灵感来源于 PureScript 和 Scala 的 Cats
  • 双泛函、逆变泛函和 profunctor,以示完整。
  • 用于 Haskell 风格 do 表达式的 run! 宏。我本来希望将其称为 do!for!,但不幸的是,这些甚至是保留关键字,即使是对于宏。
  • FunctorBifunctor 提供推导宏。
  • 半群和幺半群,以防万一。
  • 包装标准 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