Eri*_*lun 8 scala type-level-computation shapeless
我正在构建一个泛型函数,它接受一个HList表单F[T1] :: ... :: F[Tn] :: HNil,将其转换为a F[T1 :: ... :: Tn :: HNil]然后需要将其传递到传入的块中.但是,为了使其工作,我需要提取HList类型那个F[_].我在Shapeless'找到了一些与之相关的东西hlistconstraints:
/**
* Type class witnessing that every element of `L` has `TC` as its outer type constructor.
*/
trait UnaryTCConstraint[L <: HList, TC[_]]
Run Code Online (Sandbox Code Playgroud)
...但这只能用于验证传入的hlist确实是由...组成的F[_]; 然而似乎没有办法提取那个_位,以便对自己的hlist说.
我应该在哪里寻找能够找到工作的东西?或者我不应该期望找到任何开箱即用的东西,而是自己构建类型计算?
披露:这个问题是对包含一些F [_]的元组/ hlist的通用转换/折叠/映射的辅助,但在我看来,它至少与独立问题一样有用.
\n\n
看起来Sequencer已经这样做了:
\n\nimport scala.language.higherKinds\n\nclass Wrap[TC[_]] {\n def foo[L1 <: HList, L2 <: HList](xs: L1)(implicit\n seq: Sequencer.Aux[L1, TC[L2]] // L2 is the type we\'re looking for\n ): L2 = ???\n}\n\nval ret = new Wrap[Option].foo(1.some :: 2.some :: HNil)\n// ret now has type Int :: Int :: HNil\nRun Code Online (Sandbox Code Playgroud)\n\n...但我目前无法想出一种方法来使这变得更好
\n\nTC为Option.注意:我认为这作为一个答案有点有用,但我不接受它 \xe2\x80\x94 希望有人能提出一个更通用和更好看的解决方案。
\n| 归档时间: |
|
| 查看次数: |
302 次 |
| 最近记录: |