代码之家  ›  专栏  ›  技术社区  ›  V-Lamp

同构类型的cats类型类

  •  1
  • V-Lamp  · 技术社区  · 8 年前

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

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

    显然,typeclass应该为转换的每个方向公开这两个函数,理想情况下还应该公开隐式方法以方便转换。 像这样:(但没找到)

    trait Iso[A,B] {
      def to(a: A):B
      def from(b: B): A
    }
    
    1 回复  |  直到 8 年前
        1
  •  2
  •   Dmytro Mitin    8 年前

    你在找吗 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 .