3个不稳定版本

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

#6 in #applicative


5 个crate(3 个直接使用)中使用

MPL-2.0+

19KB
414

higher

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

是的,这为您提供了Rust中可泛化的monads。不,它们与Haskell相比并不十分出色,因为Rust的函数在类型系统的视角上并不完全是一等公民,实现例如为 HashSet 实现 Functor 的类型约束可能会成为一个严重的头疼问题,类型系统有时可能会特别复杂,并且需要大量的额外和极其冗长的指导才能正确地进行类型推断,但它们现在确实存在。

您将获得什么

  • 一组精细粒度的特质(FunctorPureApplyBindApplicativeMonad),用于函子、应用和monads,灵感来源于 PureScript 和 Scala的 Cats
  • 双函子、反变函子和 profunctors,以完善。
  • Haskell风格的do记法的 run! 宏。我本来希望将其命名为 do!for!,但不幸的是,这些是保留关键字,甚至对于宏也是如此。
  • FunctorBifunctor 提供派生宏。
  • 半群和幺半群,以防万一。
  • 包装标准 Future 的效果monads和包装可能失败的future的IO monads。
  • 大部分 Foldable,并打算随后实现一些 Traversable 的功能。(它总是 traverse。)
  • 环和代数,以防万一。
  • 可能没有很多好的文档,但就像任何好的Haskell程序员一样,您应该能够立即从函数的类型签名中推断出每个函数的目的。

您对这个项目的意图是什么?

我写这个有两个原因:首先,看看是否可行;其次,作为一个带有非常复杂的类型签名的胡说八道。如果你认为这实际上有用(而且我有点害怕发现自己开始这么想了),你可能希望站出来帮助维护它,因为一旦新鲜感消失,我怀疑我会给它很少的关注。

许可协议

版权所有 2019 Bodil Stokke

此软件受Mozilla公共许可证(v. 2.0)的条款约束。如果此文件中没有附带MPL副本,您可以在http://mozilla.org/MPL/2.0/获取一份。

行为准则

请注意,本项目发布时附有贡献者行为准则。通过参与本项目,您同意遵守其条款。

依赖关系

~1.5MB
~35K SLoC