使用箭头时,创建自己的数据类型有哪些步骤。
使用提供的扩展构造函数(例如Option
或Some(data)
)使用None
之类的内容非常简单。但是,如何创建具有map()
或flatMap()
等功能运算符的数据类型?
答案 0 :(得分:1)
此处概述了在Arrow中创建符合Functor
之类的Type类并因此提供诸如map
之类的方法的数据类型的步骤:
启用更高种类的类型仿真。 https://arrow-kt.io/docs/patterns/glossary/#higher-kinds
实现类型类实例 https://arrow-kt.io/docs/patterns/glossary/#using-higher-kinds-with-typeclasses
在上面的两个链接中,有一个使用ListK
包装标准库List
的示例。文档示例中没有提到的是,为了扩展Functor在ListK上添加的扩展,包括map
接口中定义的lift
,Functor
等,它需要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。)