在无形状中l1,我正在尝试编写一个函数,它需要两个l2具有任意长度的HLists ,它们具有以下属性:
l1和l2是一样的.l2包含l1在常量外部类型构造函数中包含的确切类型.所以,如果l1是的话
1 :: 1.2 :: "hello" :: HNil`
Run Code Online (Sandbox Code Playgroud)
l2 可能
Ordering[Int] :: Ordering[Double] :: Ordering[String] :: HNil
Run Code Online (Sandbox Code Playgroud)
使用UnaryTCConstraint并LengthAux让我约束长度并需要一个静态外部构造函数l2,但是它们符合它们已经成为一个问题.
关于我如何去做的任何想法?
感谢https://github.com/milessabin/shapeless/wiki/Feature-overview:-shapeless-2.0.0我理解如何压缩无形的HLists:
从Shapeless 2.0.0-M1导入一些东西:
import shapeless._
import shapeless.ops.hlist._
import syntax.std.tuple._
import Zipper._
Run Code Online (Sandbox Code Playgroud)
创建两个HLists:
scala> val h1 = 5 :: "a" :: HNil
h1: shapeless.::[Int,shapeless.::[String,shapeless.HNil]] = 5 :: a :: HNil
scala> val h2 = 6 :: "b" :: HNil
h2: shapeless.::[Int,shapeless.::[String,shapeless.HNil]] = 6 :: b :: HNil
Run Code Online (Sandbox Code Playgroud)
拉链他们:
scala> (h1, h2).zip
res52: ((Int, Int), (String, String)) = ((5,6),(a,b))
Run Code Online (Sandbox Code Playgroud)
现在尝试定义一个执行相同操作的函数:
scala> def f[HL <: HList](h1: HL, h2: HL) = (h1, h2).zip
f: [HL <: shapeless.HList](h1: HL, h2: HL)Unit
Run Code Online (Sandbox Code Playgroud)
推断的返回类型是Unit,实际上将f应用于h1和h2就是这样:
scala> …Run Code Online (Sandbox Code Playgroud)