2016-09-13 9 views
0

На scala7.0.6: следующая программа работы:импорт scalaz.syntax.traverse._ вне объекта не работает

import scalaz._, Scalaz._ 

object Playground extends App { 
    val smallNumbers = List(1,2,3,4,5) 
    val doubleSmall: Int => Option[Int] = x => if (x < 30) Some(x * 2) else None 

    import scalaz.syntax.traverse._ 

    println(smallNumbers.traverse(doubleSmall)) 
} 

Однако, если я двигаю import scalaz.syntax.traverse._ вне объекта Playground, на вершине файл, то я получаю:

Error: value traverse is not a member of List[Int] 

Почему это так?

ответ

1

При импорте Scalaz._ и scalaz.syntax.traverse._ в том же объеме:

<ToTraverseOps: error> is not a valid implicit value for 
    Wrapper.Playground.smallNumbers.type => ?{def traverse: ?} because: 
reference to ToTraverseOps is ambiguous; 
it is imported twice in the same scope by 
import scalaz.syntax.traverse._ 
and import Scalaz._ 
      println(smallNumbers.traverse(doubleSmall)) 

Если Scalaz._ и scalaz.syntax.traverse._ импортируются в разном (вложенном) Прицелы нет никакого конфликта, последняя тени прежней. Или вы можете полностью отказаться от import scalaz.syntax.traverse._, он скомпилируется.

scalac имеет флаг -Xlog-implicits который помогает.