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库支持的约束

  • 模块
  1. Applicative
  2. Conmonad
  3. Comparable
  4. Constant
  5. Euclidean Ring
  6. Foldable
  7. Functor
  8. Group
  9. Hashable
  10. Iterable
  11. Logical
  12. Metafunction
  13. Monad
  14. MonadPlus
  15. Monoid
  16. Orderable
  17. Product
  18. Ring
  19. Searchable
  20. Struct

boost::hana::IntegralConstant<C>

Applicative

说明

Applicative约束表示具有提升值和组合计算能力的Functor。

Functor只能采用普通函数并将其映射到包含值的结构上,以获取包含值的新结构。 Applicative更直观地取值并将其提升到结构中。 另外,Applicative可以采用包含函数的结构,并将其应用于包含值的结构以获得包含值的新结构。 通过在结构内部调用函数,可以将n元(n-ary)函数应用于包含值的n个结构。

  • 注意

本文档没有详细介绍Applicative的本质。 但是,Typeclassopedia是一个很好的Haskell-oriented的资源,可以找到这样的信息。

最小完全定义

liftap满足以下规则。一个Applicative必须是一个Functor

规则

给定一个ApplicativeF,它必须满足以下规则:

  1. 特性

    对于所有xs对象的tag F(A),有:

  1. ap(lift<F>(id),xs) == xs
  1. 组成

    对于所有xs对象的tagF(A)及一个Applicative中的function,有:fs:F(B -> C),gs:F(A -> B),

  1. ap(ap(lift<F>(compose),fs,gs),xs) == ap(fs,ap(gs,xs))
  1. 同形

    对于所有x对象的tagAfunction,有:f:A -> B,

  1. ap(ap(lift<F>(f),lift<F>(f(x)) == lift<F>(f(x))
  1. 互换

    对于所有x对象的tagA及一个Applicative中的function,有:fs:F(A -> B),

  1. ap(fs,lift<F>(x)) == ap(lift<F>(apply(-,x)),fs)

其中apply(-,x)表示apply函数从Functional模块到x参数的部分应用。

作为这些规则的结果,FFunctor的模型将满足所有对象xs的标签F(A)和函数:f:A -> B

  1. transform(xs,f) == ap(lift<F>(f),xs)
精练
  1. Fuctor (自由模式)

    作为规则的结果,任何ApplicativeF可以通过设置作为Functor

  1. transform(xs,f) = ap(lift<F>(f),xs)
具体模型

hana::lazy,hana::optional,hana::tuple

结构保留function

Variables

Variable 文档