You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Scala中基于两个Applicative乘积实现Traversable函子的编译问题

关于Scala Cats中一次遍历完成多操作的类型参数问题

问题场景

我尝试在Scala中借助Cats库遍历数据结构时同时完成两项操作,但写出的代码无法编译。

无法编译的示例代码

import cats.data.Tuple2K
import cats.data.Const
import cats.syntax.traverse._

List("A", "BB", "CCC").traverse[Tuple2K[[x] =>> Const[Int, x], [x] =>> Const[Int, x], Nothing], Nothing]{
 case str => 
   Tuple2K[[x] =>> Const[Int, x], [x] =>> Const[Int, x], Nothing](Const(1), Const(str.size)) 
} 

编译错误信息

Found:    cats.data.Tuple2K[[x] =>> cats.data.Const[Int, x], [x] =>> cats.data.Const[Int, x], Nothing]     
Required: cats.data.Tuple2K[[x] =>> cats.data.Const[Int, x], [x] =>> cats.data.Const[Int, x], Nothing][Nothing]    

核心需求

仅通过一次遍历同时获取可遍历结构(示例中的列表)的大小并执行基于内容的计算,避免两次遍历。

更新说明

移除显式类型参数后,代码可正常编译并实现预期功能:

import cats.data.Tuple2K
import cats.data.Const
import cats.syntax.traverse._

List("A", "BB", "CCC").traverse{
  case str =>
    Tuple2K[[x] =>> Const[Int, x], [x] =>> Const[Int, x], Nothing](Const(1), Const(str.size))
} // 输出Tuple2K(Const(3),Const(6)),类型为Tuple2K[[x >: Nothing <: Any] => Const[Int, x], [x >: Nothing <: Any] => Const[Int, x], List[Nothing]]

困惑点

编译器能自行推断出正确类型,但显式传入这些类型时却无法通过编译,想知道原因。

内容的提问来源于stack exchange,提问作者user27895414

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.16 23:41:01