Hana参考文档

优质
小牛编辑
138浏览
2023-12-01

如用户手册中所述,参考文档按逻辑模块进行了区分.

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 adaptersBoost.Fusion适配器
Boost.MPL adaptersBoost.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

规则

给定一个Applicative--F,它必须满足以下规则:

  1. 特性

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

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

    对于所有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))
  1. 同形

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

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

    对于所有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参数的部分应用。

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

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

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

transform(xs,f) = ap(lift<F>(f),xs)