Я попытался определить функцию, которая с учетом параметра типа N <: Nat
строит список с точно 3 N
.Построение фиксированного размера Список Nat N
import shapeless._
import shapeless.nat._
scala> def natNOfSize3[N <: Nat](n: Nat): Sized[List[N], _3] =
Sized[List, _3](List(n, n, n))
<console>:17: error: wrong number of type parameters for overloaded method value apply with alternatives:
[CC[_]]()(implicit cbf: scala.collection.generic.CanBuildFrom[Nothing,Nothing,CC[Nothing]], implicit ev: shapeless.AdditiveCollection[CC[Nothing]])shapeless.Sized[CC[Nothing],shapeless._0] <and>
[CC[_]]=> shapeless.SizedBuilder[CC]
def natNOfSize3[N <: Nat](n: Nat): Sized[List[N], _3] = Sized[List, _3](List(n, n, n)) ^
Но я не понимаю, почему это не удалось.
Как сказал Трэвис, ваши аргументы в Sized (...) неверны, вы передаете коллекцию, а не только элементы. Примечание: Sized.apply возвращает SizedBuilder https://github.com/milessabin/shapeless/blob/master/core/src/main/scala/shapeless/sized.scala SizedBuilder.apply принимает элементыhttps: // github .com/milessabin/shapeless/blob/b73453bab27e73b6aa1206805e73ec583852309d/project/Boilerplate.scala Магия компилятора делает их похожими на один вызов функции. –
Интересно - https://github.com/milessabin/shapeless/blob/b73453bab27e73b6aa1206805e73ec583852309d/project/Boilerplate.scala#L428, Marcus. Любые сообщения в блоге, которые вы можете, порекомендуйте, чтобы комментировать этот класс «Boilerplate»? –
Нет сообщений в блоге, которые я знаю, однако комментарий в https://github.com/milessabin/shapeless/blob/b73453bab27e73b6aa1206805e73ec583852309d/project/Boilerplate.scala#L115 может быть достаточно объяснением. –