6

我可以写一个简单的递归多态函数:

object simpleRec extends Poly1 {
  implicit def caseInt = at[Int](identity)
  implicit def caseList[A, B](implicit ev: simpleRec.Case.Aux[A, B]) =
    at[List[A]](_.headOption.map(simpleRec))
}

这似乎在很大程度上做了我想要的;但是,我似乎得到了一个无意义的结果类型:

scala> simpleRec(List.empty[List[Int]])
res3: Option[B] = None

scala> simpleRec(List(List(1)))
res4: Option[B] = Some(Some(1))

我怎样才能让这给我的价值Option[Option[Int]]而不是Option[B]?我希望我在这里犯了一些愚蠢的错误,但无法弄清楚它是什么。

4

1 回答 1

2

这可能是一个错误,以下代码按预期工作:

object simpleRec extends Poly1 {
  implicit def caseInt = at[Int](identity)
  implicit def caseList[A](implicit ev: simpleRec.Case[A]) =
    at[List[A]](_.headOption.map(simpleRec))
}

使用shapeless_2.11-2.0.0

于 2014-10-21T21:04:08.367 回答