Scalaz optionT transfomer似乎失败了类型别名

时间:2012-09-04 10:46:33

标签: scala compiler-errors scalaz

似乎使用类型别名会混淆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的经验有限,我不确定是否应该为此提交错误,如果这是预期的行为。

  

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

2 个答案:

答案 0 :(得分:2)

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

答案 1 :(得分:1)

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

val x: Foo[Int] = Some(Some(4))
val y = optionT[Option](x)
y: scalaz.OptionT[Option,Int] = OptionT(Some(Some(3)))