我试图定义这个同时使用 shapeless 和 Scalaz 的方法,但是它从 scalaz 中获取隐式的 map ,而不是某些东西(也许是“隐式宏”?我什至不知道那是什么)来自无形:
import scalaz._
import Scalaz._
import Category._
import shapeless.{Lens => _, _}
import poly._
import syntax.std.tuple._
import language.{higherKinds,implicitConversions}
/** Partitions an object which is isomorphic to a Seq, into two objects of the same type. */
def partitionIso[A,B](p: B => Boolean)(a: A)(implicit iso: A <=> Seq[B]): (A, A) =
iso.to(a).partition(p).map(iso.from(_))
Eclipse 说:
Multiple markers at this line
- Implicit arguments found: =>
( scalaz.Functor.Tuple2Functor )
- type mismatch; found : (Seq[B], A) required: (A, A)
- Implicit conversions found: => Tuple2MA()
如何更改此代码以使其编译?
最佳答案
作为仍在学习 Scala 的人,我从未遇到过这个问题(尽管这是关于隐式的一件可怕的事情,没有人谈论过,因为它们看起来很酷),但我认为你有几个选项:
- 通过在导入中将其别名为
_
之类的内容来禁用您不想要的隐式
(仅当隐式
为< em>不在一个特质中)以类似 this 的方式. - 使用同名的非
隐式
方法覆盖隐式
。 - 只是不要导入隐式转换。如果需要的话,编写您自己的代码来执行相同的操作。
关于scala - 同时使用 Shapeless 和 Scalaz 6 - 导入冲突,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20721625/