加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 服务器 > 安全 > 正文

scala – 如何使用Shapeless编写递归多态函数

发布时间:2020-12-16 18:48:39 所属栏目:安全 来源:网络整理
导读:我可以编写一个简单的递归多态函数: 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))} 这似乎很大程度上符合
我可以编写一个简单的递归多态函数:

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]的值?我希望我在这里犯了一些愚蠢的错误,但无法弄清楚它是什么.

解决方法

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

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读