scalaz 连接操作需要显式指定类型

scalaz join operation requires type explicitly specified

scala> Some(Some(9)) 
res23: Some[Some[Int]] = Some(Some(9))

scala> res23.join #plan a
<console>:24: error: value join is not a member of Some[Some[Int]]
          res23.join
                ^

scala> ((Some(Some(9))):Option[Option[Int]]).join #plan b
res25: Option[Int] = Some(9)

认为 plan a 应该等同于 plan b。为什么必须明确指定类型?

不仅如此,我还看到其他地方必须明确说明参数类型。认为 scala 可以进行类型推断,不是吗?

答案在你的 REPL 中:)

在第三行中,您声明了一个 Option[Option[Int]] 而不是 Some[Some[Int]],这是在第一条命令中推断出的类型。

尝试:

scala> Option(Option(9)).join
res3: Option[Int] = Some(9)