Как реализовать ограничения литерального типа HList? - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь выполнить некоторые вычисления для типов HList (чтобы применить тензорную алгебру).Пока что я терплю неудачу, используя 2.13.0-M4.

Вот вызов:

type XInt = Int with Singleton
def mult[N <: XInt, M <: XInt, P <: XInt, T <: HList]
     (a: N :: M :: T, b: M :: P :: T): N :: P :: T= ???
val a = 8.narrow :: 4.narrow :: HNil
val b = 4.narrow :: 5.narrow :: HNil
mult(a, b) // should yield 8 :: 5 :: HNil

1 Ответ

0 голосов
/ 15 октября 2018

Попробуйте

def mult[N <: XInt, M <: XInt, P <: XInt, T <: HList](a: N :: M :: T, b: M :: P :: T): N :: P :: T = 
  (a, b) match { case (n :: _ :: t, _ :: p :: _) => n :: p :: t }

или

def mult[N <: XInt, M <: XInt, P <: XInt, T <: HList](a: N :: M :: T, b: M :: P :: T): N :: P :: T = 
  a.head :: b.tail.head :: b.tail.tail

или просто

def mult[N <: XInt, M <: XInt, P <: XInt, T <: HList](a: N :: M :: T, b: M :: P :: T): N :: P :: T = 
  a.head :: b.tail
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...