如何使用 Arrow 创建自己的数据类型
How do I create my own data type with Arrow
使用箭头创建自己的数据类型的步骤是什么。
将 Option
与提供的扩展构造函数(如 Some(data)
或 None
一起使用很简单。但是,如何创建自己的数据类型,它具有 map()
或 flatMap()
等函数运算符?
如果我没有正确理解你的问题:
https://arrow-kt.io/docs/patterns/glossary/
请注意,注释处理器应该能够为您生成类型类实例。但从根本上说,您只需要决定您的数据类型将支持哪些类型类并为这些类型类提供实现。 (请注意,类型类形成继承层次结构,因此(例如)如果您实现 Monad,您(可能)需要实现 Functor。)
在 Arrow 中创建符合类型 class 的数据类型(如 Functor
并因此提供如 map
的方法的步骤概述如下:
启用更高类型的仿真。 https://arrow-kt.io/docs/patterns/glossary/#higher-kinds
实现类型class实例
https://arrow-kt.io/docs/patterns/glossary/#using-higher-kinds-with-typeclasses
在上面的两个链接中有一个使用 ListK
包装标准库 List
的示例。文档示例没有提到的是,为了扩展 Functor 在 ListK 上添加的扩展,包括 map
、lift
等,如 Functor
接口中定义的,它需要 kapt 和箭头元
kapt "io.arrow-kt:arrow-meta:$arrow_version"
Arrow meta 负责扩展 Higher Kinds 和 Extensions 类型 class instances。当前扩展中的一个限制是,如果您计划在同一个模块中同时使用 @higherkind
和 @extension
,由于 kapt 处理的顺序,它将无法工作。为此,您需要在一个模块中使用数据类型,在另一个模块中使用扩展。这实际上是一种很好的做法,也是我们在 Arrow 中遵循的做法,因为它允许用户在不想要扩展时按需导入数据类型。
使用箭头创建自己的数据类型的步骤是什么。
将 Option
与提供的扩展构造函数(如 Some(data)
或 None
一起使用很简单。但是,如何创建自己的数据类型,它具有 map()
或 flatMap()
等函数运算符?
如果我没有正确理解你的问题:
https://arrow-kt.io/docs/patterns/glossary/
请注意,注释处理器应该能够为您生成类型类实例。但从根本上说,您只需要决定您的数据类型将支持哪些类型类并为这些类型类提供实现。 (请注意,类型类形成继承层次结构,因此(例如)如果您实现 Monad,您(可能)需要实现 Functor。)
在 Arrow 中创建符合类型 class 的数据类型(如 Functor
并因此提供如 map
的方法的步骤概述如下:
启用更高类型的仿真。 https://arrow-kt.io/docs/patterns/glossary/#higher-kinds
实现类型class实例 https://arrow-kt.io/docs/patterns/glossary/#using-higher-kinds-with-typeclasses
在上面的两个链接中有一个使用 ListK
包装标准库 List
的示例。文档示例没有提到的是,为了扩展 Functor 在 ListK 上添加的扩展,包括 map
、lift
等,如 Functor
接口中定义的,它需要 kapt 和箭头元
kapt "io.arrow-kt:arrow-meta:$arrow_version"
Arrow meta 负责扩展 Higher Kinds 和 Extensions 类型 class instances。当前扩展中的一个限制是,如果您计划在同一个模块中同时使用 @higherkind
和 @extension
,由于 kapt 处理的顺序,它将无法工作。为此,您需要在一个模块中使用数据类型,在另一个模块中使用扩展。这实际上是一种很好的做法,也是我们在 Arrow 中遵循的做法,因为它允许用户在不想要扩展时按需导入数据类型。