6 个版本
使用旧 Rust 2015
0.1.5 | 2018 年 6 月 10 日 |
---|---|
0.1.4 | 2018 年 5 月 26 日 |
#2698 in Rust 模式
24KB
336 行
分类
- 简介
- 安装
- 用法
- 需求
- 基本功能
- Rust 中的 trait 作为类型类
- Rust 的 std 结构体和枚举的类型类实现
- 贡献和开发
- 感谢名单
- 许可证
简介
KaguyaRs 是一个 玩具 函数式 Rust 库。
实际上,这只是我熟悉 Rust 的方法。我会尽力实现尽可能多的工具。但绝对不要在生产环境中使用,除非
- 有一天,我在简介中移除了 玩具。或者
- 我发布了 1.0 稳定版。
该库的关键关注点
- 如果可能的话,这个库中的所有函数都将尽可能的纯。
- 类似于 1,但纯 -> 惰性
- 基于 1,可能会发生重克隆,稍后将会引入持久数据结构以实现 4
- 性能。如果不需要,将避免使用
trait object
- 实现可能很丑陋且有错误,请随意提出任何想法。
安装
在您的 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。