首页 > 解决方案 > 同构类型的 Cats 类型类

问题描述

我应该使用什么猫类型类来编码两种类型是同构的(即可以在没有影响的情况下来回转换)

我想将类型的分解编码为另外两个元组: A <=> (B, C)

显然,类型类应该为每个转换方向公开这两个函数,并且最好是隐式方法以便于转换。像这样的东西:(但未能找到它)

trait Iso[A,B] {
  def to(a: A):B
  def from(b: B): A
}

标签: scalascala-cats

解决方案


你在找cats.evidence.Is吗?

type A
type B

type X = Is[A, B] // A Is B

val a: A = ???
val b: B = ???
val x: A Is B = ???
val y: B Is A = ???

x.coerce(a): B
y.coerce(b): A

它类似于scalaz.Leibniz


推荐阅读