我应该把类型类实例放在哪里?

时间:2021-06-18 22:49:14

标签: scala scalaz scala-cats

假设我开发了一个新的公共数据结构,我们称之为FancyList。它没有外部依赖,每个人都喜欢它。
这个 FancyList 原来是 FunctorMonadMonoidKTraverse
为这些类型类向我的用户提供 cats 实例的最佳方式是什么?我认为我可以放置它们的方式:

在同一个图书馆

  • 缺点:不关心 cats 的用户现在依赖于这个库。源代码也让他们更加困惑。
  • Pro:如果我把实例放在 FancyList 的伴生对象中,隐式解析会自动找到它们,而不需要用户显式导入隐式(同样的方式没有import cats.implicits._ 上的实例需要 NonEmptyList)

在新图书馆

  • 优点:没有外部依赖。简单的大加分项。
  • 缺点:确实关心猫的用户将 1) 必须导入额外的依赖项,以及 2) 显式地导入隐式证据(与您必须以相同的方式导入) import cats.implicits._ 用于标准库结构的实例)。

此外,如果下个月用户要求支持 scalaz 怎么办?哪种方法更合适?

总的来说,我的问题是:

  • 我的利弊清单准确吗?我错过了什么吗?
  • 我应该考虑的主要论点是什么?
  • 处于类似位置的其他图书馆做了什么?你能举出什么例子吗?

0 个答案:

没有答案
相关问题