Hana参考文档
如用户手册中所述,参考文档按逻辑模块进行了区分.
| Concepts | 由库提供的(约束语义)Concept | |
| Applicative | 表示具有提升值和组合计算的能力的函数 | |
| Comonad | 表示上下文相关的计算和数值 | |
| Comparable | 表示相等和不相等的比较 | |
| Constant | 表示数据需要在编译时可操作 | |
| Euclidean Ring | 表示也可以被赋予分割算法的交换“环” | |
| Foldable | 表示该数据结构可被推导为单个值 | |
| Functor | 表示可映射类型 | |
| Group | ||
| Hashable | ||
| Iterable | ||
| Logical | ||
| Metafunction | 表示一个函数,它接收hana::type作为输入,并输出一个hana::type | |
| Monad | ||
| MonadPlus | ||
| Orderable | 表示可排序的序列 | |
| Product | 表示有2个类型元素的容器 | |
| Ring | ||
| Searchable | 表示可进行查找操作的结构 | |
| Sequence | 表示基于索引的序列 | |
| Struct | 表示类struct的用户自定义类型 | |
| Data types | 库提供的通用数据类型 | |
| Functional | 通用函数对象 | |
| Core | 库的核心功能 | |
| Experimental features | 实验性功能,可能或不会选入库。 这些功能是不稳定的 | |
| External adapters | 外部库适配器 | |
| Boost.Fusion adapters | Boost.Fusion适配器 | |
| Boost.MPL adapters | Boost.MPL适配器 | |
| Other Boost adapters | 其它Boost适配器 | |
| Standard library adapters | 标准库适配器 | |
| Configuration options | 配置选项,用来调整库的全局行为 | |
| Assertions | 宏,用于执行不同各类的断言 | |
| Details | 实现细节,即使它已经文档化了,也不要依赖于此 |
Concepts
Hana库支持的约束
- 模块
- Applicative
- Conmonad
- Comparable
- Constant
- Euclidean Ring
- Foldable
- Functor
- Group
- Hashable
- Iterable
- Logical
- Metafunction
- Monad
- MonadPlus
- Monoid
- Orderable
- Product
- Ring
- Searchable
- Struct
- 类
boost::hana::IntegralConstant<C>
Applicative
说明
Applicative约束表示具有提升值和组合计算能力的Functor。
Functor只能采用普通函数并将其映射到包含值的结构上,以获取包含值的新结构。 Applicative更直观地取值并将其提升到结构中。 另外,Applicative可以采用包含函数的结构,并将其应用于包含值的结构以获得包含值的新结构。 通过在结构内部调用函数,可以将n元(n-ary)函数应用于包含值的n个结构。
- 注意
本文档没有详细介绍
Applicative的本质。 但是,Typeclassopedia是一个很好的Haskell-oriented的资源,可以找到这样的信息。
最小完全定义
lift和ap满足以下规则。一个Applicative必须是一个Functor。
规则
给定一个Applicative—F,它必须满足以下规则:
特性
对于所有
xs对象的tagF(A),有:
ap(lift<F>(id),xs) == xs
组成
对于所有
xs对象的tag—F(A)及一个Applicative中的function,有:fs:F(B -> C),gs:F(A -> B),
ap(ap(lift<F>(compose),fs,gs),xs) == ap(fs,ap(gs,xs))
同形
对于所有
x对象的tag—A及function,有:f:A -> B,
ap(ap(lift<F>(f),lift<F>(f(x)) == lift<F>(f(x))
互换
对于所有
x对象的tag—A及一个Applicative中的function,有:fs:F(A -> B),
ap(fs,lift<F>(x)) == ap(lift<F>(apply(-,x)),fs)其中
apply(-,x)表示apply函数从Functional模块到x参数的部分应用。
作为这些规则的结果,F的Functor的模型将满足所有对象xs的标签F(A)和函数:f:A -> B:
transform(xs,f) == ap(lift<F>(f),xs)
精练
Fuctor (自由模式)
作为规则的结果,任何
Applicative—F可以通过设置作为Functor
transform(xs,f) = ap(lift<F>(f),xs)
具体模型
hana::lazy,hana::optional,hana::tuple
