2

似乎使用类型别名会混淆 Scala 类型推断器或编译器。确实试图编译

import scalaz.OptionT.optionT
type Foo[A] = Option[Option[A]]
val x: Foo[Int] = Some(Some(3))
optionT(x)

导致奇怪的错误

java.lang.IllegalArgumentException: transpose requires all collections have the same size

由于我对 Scala 的经验有限,我不确定是否应该为此提交错误,或者这是否是预期的行为。

这真的是一个错误还是预期的行为?

4

2 回答 2

2

刚刚测试了自己,IllegalArgumentException 是编译器的救助,这将是一个错误。

于 2012-09-04T11:20:25.040 回答
1

我也对此进行了测试,它看起来确实是一个错误,你应该向 scala 团队报告。但是,您可以通过给编译器提示来解决此问题:

val x: Foo[Int] = Some(Some(4))
val y = optionT[Option](x)
y: scalaz.OptionT[Option,Int] = OptionT(Some(Some(3)))
于 2012-09-04T11:28:36.170 回答