如何添加多個項目到HList
?添加多個元素到無定形HList
我天真的版本不編譯:
(1 to 100).foldLeft(HNil)((l,i) => i :: l)
對於普通List
s此方法將工作做好。然而,對於HList
,我假設,它需要提供一個Poly2
,它需要一個項目和一個HList並返回附加列表。
當然,如果有更好的方法來添加多個項目,那些方法將非常感激。
如何添加多個項目到HList
?添加多個元素到無定形HList
我天真的版本不編譯:
(1 to 100).foldLeft(HNil)((l,i) => i :: l)
對於普通List
s此方法將工作做好。然而,對於HList
,我假設,它需要提供一個Poly2
,它需要一個項目和一個HList並返回附加列表。
當然,如果有更好的方法來添加多個項目,那些方法將非常感激。
這可能是XY problem。但是你想在這裏做什麼可以用一個Sized集合來完成。
scala> import shapeless._, syntax.sized._
import shapeless._
import syntax.sized._
scala> (1 to 10).reverse.toList.ensureSized[nat._10].toHList
res1: shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.::[Int,shapeless.HNil]]]]]]]]]] = 10 :: 9 :: 8 :: 7 :: 6 :: 5 :: 4 :: 3 :: 2 :: 1 :: HNil
如果你想有一個範圍的100你有nat._100
不存在這個問題,所以你必須創建自己。我只是計算它:
val prod = the[ops.nat.Prod[nat._10, nat._10]]
type _100 = prod.Out
(1 to 100).reverse.toList.ensureSized[_100].toHList
是的,你的權利,這是一個XY問題,謝謝你的提示。我只是想要添加幾千個元素來執行一些簡單的基準測試(因爲我想使用HList一個簡單的異構映射,而不需要任何implicits等,但是,這具有O(n)讀取的缺點訪問,因此我想基準它)。 –
結果的類型是什麼? –
@CyrilleCorpet只有Ints的HList,所以我想它會是Int :: ... :: Int :: HNil(當然,在這個簡單的例子中,我可以使用一個普通的列表,但是我的實際用例更復雜,我已經在這個初始階段失敗了。) –
'foldLeft'如何返回一個類型,這取決於它所應用的列表的長度?你的問題是你想要將動態信息(範圍的長度)轉換成靜態信息(「HList」的長度,它的類型是編碼的)。你將無法做到這一點。 –