当前位置: 首页 > 知识库问答 >
问题:

如何映射未成形的Nat列表

越伯寅
2023-03-14

我有一个Nat的列表,我想把它映射过来

object NatToString extends Poly1 {
    implicit def caseNat = at[Nat](_.toString)
}

val list = _5 :: _3 :: HNil
list.map(NatToString) 

此代码不会编译并引发:

找不到参数映射器的隐式值:
未成形。ops。hlist。映射器[Main.Nat\u to\u String.type,shapeless:[shapess.Nat.u 5,shapess:[shapess.Nat.u 3,shapess.HNil]]

但是如果我用Int(或String,或List,等等)代替Nat做同样的事情,它就可以完美地工作。

如何绘制Nat的HList?

共有1个答案

郭均
2023-03-14

问题是Poly1。Case在其类型参数中不是协变的。考虑以下内容:

trait Foo
trait Bar extends Foo

val foo = new Foo {}
var bar = new Bar {}

object fooIdentity extends Poly1 {
  implicit def caseFoo = at[Foo](identity)
}

现在,fooIdentity(foo)将编译,但fooIdentity(bar)不会编译

在您的情况下,HList的成员静态类型为5和3。这些是Nat的子类型,但NatToString并不重要,因为它唯一的情况是寻找静态类型为Nat的东西。

诀窍就是在案例中添加一个类型参数:

object NatToString extends Poly1 {
  implicit def caseNat[N <: Nat] = at[N](_.toString)
}

你会发现,通常直接使用Nat并不是你想要的,你几乎总是想要一个特定的子类型。

 类似资料:
  • 前端将这个json发送到我的API 控制器:

  • 我有一个实体,看起来像这样: 输入数据是一个

  • 我从数组列表中检索数据。已有数组列表具有与哈希映射类型(key、values)相同值;在从数组列表中检索这些数据并映射到哈希映射变量之后。我必须用一个叫做tax的变量来分组。 1)在哈希映射中添加Add 之后,将这些哈希映射值添加到名为final_cart_list_1的数组列表初始化类型的Arraylist中 在此之后,我将所有产品的产品特别税值 税务的日志cat值如下所示 之后,我采取产品的具

  • 我正在尝试使用@ManyToOne和@OneToMany映射实体表。映射列位于名为“internal_plan_id”的子表中。根据要求,我不能更改名称。下面是两个实体表:父表 儿童桌: 我得到错误为:错误:关系“financial_plan_subplan”的列“internal_plan_id_internal_plan_id”不存在。 financial_subplan中用于映射的现有列名是

  • 问题内容: 我一直在研究一个非常简单的JPA示例,并试图将其调整为现有数据库。但是我无法克服这个错误。(下面。)这只是我没看到的一些简单的事情。 在下面的DocumentManager类中(一个简单的servlet,因为这是我的目标),它做了两件事: 插入一行 返回所有行 插入效果很好-一切都很好。问题出在检索上。我尝试了各种参数值,但没有走运,并且尝试了各种更复杂的类注释(如列类型),但都没有成