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 (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |