如何使用Arrow创建自己的数据类型

时间:2018-02-21 19:42:13

标签: android kotlin arrow-kt

使用箭头时,创建自己的数据类型有哪些步骤。

使用提供的扩展构造函数(例如OptionSome(data))使用None之类的内容非常简单。但是,如何创建具有map()flatMap()等功能运算符的数据类型?

2 个答案:

答案 0 :(得分:1)

此处概述了在Arrow中创建符合Functor之类的Type类并因此提供诸如map之类的方法的数据类型的步骤:

  1. 启用更高种类的类型仿真。 https://arrow-kt.io/docs/patterns/glossary/#higher-kinds

  2. 实现类型类实例 https://arrow-kt.io/docs/patterns/glossary/#using-higher-kinds-with-typeclasses

在上面的两个链接中,有一个使用ListK包装标准库List的示例。文档示例中没有提到的是,为了扩展Functor在ListK上添加的扩展,包括map接口中定义的liftFunctor等,它需要kapt和arrow元。

kapt    "io.arrow-kt:arrow-meta:$arrow_version"

Arrow meta负责为类型类实例扩展“高级种类和扩展”。当前扩展的局限性在于,如果您计划在同一模块中同时使用@higherkind@extension,则由于kapt处理的顺序而无法使用。为此,您需要在一个模块中具有数据类型,而在另一模块中具有扩展。这实际上是一种很好的做法,也是我们在Arrow中遵循的,因为它允许用户在不需要扩展名的情况下按需导入数据类型。

答案 1 :(得分:0)

如果我正确理解了您的问题:

https://arrow-kt.io/docs/patterns/glossary/

请注意,注释处理器应该能够为您生成typeclass实例。但是从根本上讲,您只需要确定数据类型将支持哪些类型类并为这些类型类提供实现即可。 (请注意,类型类形成了一个继承层次结构,因此(例如)如果您实现Monad,则(可能)需要实现Functor。)