6 个版本

使用旧 Rust 2015

0.1.5 2018 年 6 月 10 日
0.1.4 2018 年 5 月 26 日

#2698 in Rust 模式

Apache-2.0

24KB
336

License crates.io Build Status docs

分类

  1. 简介
  2. 安装
  3. 用法
  4. 需求
  5. 基本功能
  6. Rust 中的 trait 作为类型类
  7. Rust 的 std 结构体和枚举的类型类实现
  8. 贡献和开发
  9. 感谢名单
  10. 许可证

简介

KaguyaRs 是一个 玩具 函数式 Rust 库。

实际上,这只是我熟悉 Rust 的方法。我会尽力实现尽可能多的工具。但绝对不要在生产环境中使用,除非

  1. 有一天,我在简介中移除了 玩具。或者
  2. 我发布了 1.0 稳定版。

该库的关键关注点

  1. 如果可能的话,这个库中的所有函数都将尽可能的纯。
  2. 类似于 1,但纯 -> 惰性
  3. 基于 1,可能会发生重克隆,稍后将会引入持久数据结构以实现 4
  4. 性能。如果不需要,将避免使用 trait object
  5. 实现可能很丑陋且有错误,请随意提出任何想法。

安装

在您的 Cargo.toml 中添加依赖项

[dependencies]
kaguya_rs = "*"

用法

请参考测试和文档

需求

  • 工具链:nightly
    • 它可以在稳定版本中正常使用,但是需要功能特性,如果您想在稳定版本下使用,请克隆仓库
  • rustc 版本 >= 1.26

基本功能

以下列出了基本功能及其签名,基于映射的功能将在以后应用

有两个版本:函数和宏

对于 curry 版本,它充当宏。该宏将形成一个新闭包,例如

let f = map(|x| x+1, [1,2,3,4,5]);
assert_eq!(f, [2,3,4,5,6]);

let f2 = map!(|x| x+1)([1,2,3,4,5]); // (Number -> Number) -> [Number] -> [Number]
assert_eq!(f2, [2,3,4,5,6])

对于宏版本,请参考测试以获取更多详细信息,因为宏可以自动 curry,具体取决于宏的调用方式。

有关详细信息,请参阅 TODO.md。

Rust 中的 trait 作为类型类

在 Haskell 中,有许多有用的类型类,如 Monad、Functor、Applicative 等。我将实现尽可能多的类型类,这可以极大地增强 Rust 中函数式编程的能力。

Rust 的 std 结构体和枚举的类型类实现

有一些结构和枚举在 Rust 中被广泛使用,例如 Vec、HashMap、Option、Result 等。它们可以被视为可以实施 Haskell 类似于 Monad 的 ADT。我将实现它们以增强 std 结构体和枚举的功能。

贡献和开发

请自由地贡献和开发基于此库。请确保您必须遵守许可证的约束。

如果您有兴趣一起开发这个库,请提出 PR 或发送电子邮件给我,说明您作为贡献者想为这个库做什么。

对于其他问题,请为以下创建新问题。

感谢名单

许可证

Apache 许可证 v2。

无运行时依赖