Shapeless yêu cầu loại phương thức phụ thuộc (-Ydependent-method-types
) và tôi muốn có một tệp nhị phân có thể tải xuống 2.9.1 để tôi có thể dùng thử nhưng thực sự có vẻ thanh lịch. Dựa trên this unit test nó sẽ áp dụng đối với trường hợp của bạn như thế này:
import shapeless.Tuples._
import shapeless.HList._
val t7 = (t1.hlisted ::: t2.hlisted ::: t3.hlisted).tupled
Mặc dù Miles chỉ ra không có bảo lãnh của hỗ trợ, nó thực sự có kiểm tra đơn vị và nguồn là trên github với một giấy phép mã nguồn mở như vậy ít nhất nó không phải chỉ là một thử nghiệm trong một bài đăng trên blog.
Edit: làm việc như advertized - mất một thời gian để biên dịch và tôi đã có thêm -Xss1m
để SBT:
$ scala -Ydependent-method-types -cp target/scala-2.9.1/shapeless_2.9.1-1.1.0.jar
Welcome to Scala version 2.9.1.final (Java HotSpot(TM) Client VM, Java 1.7.0).
Type in expressions to have them evaluated.
Type :help for more information.
scala> import shapeless.Tuples._
import shapeless.Tuples._
scala> import shapeless.HList._
import shapeless.HList._
scala> val t1 = Tuple2("abcd", "efg")
t1: (java.lang.String, java.lang.String) = (abcd,efg)
scala> val t2 = Tuple2(1234, "lmnop")
t2: (Int, java.lang.String) = (1234,lmnop)
scala> val t3 = Tuple3("qrs", "tuv", "wxyz")
t3: (java.lang.String, java.lang.String, java.lang.String) = (qrs,tuv,wxyz)
scala> (t1.hlisted ::: t2.hlisted ::: t3.hlisted).tupled
res0: (java.lang.String, java.lang.String, Int, java.lang.String, java.lang.String,
java.lang.String, java.lang.String) = (abcd,efg,1234,lmnop,qrs,tuv,wxyz)
Check-out HLists các hình thức khác nhau: https://github.com/harrah/up http: //apocalisp.wordpress.com/2010/06/08/type-level-programming-in-scala/ http://stackoverflow.com/questions/8066654/covariance-in-type-level-programming/8067456#8067456 – Owen