2

我正在尝试定义这种同时使用 shapeless 和 Scalaz 的方法,但是它从 scalaz 中为地图拾取隐式,而不是某些东西(也许是“隐式宏”?我什至不知道那是什么) ) 从无形:

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(_))

日食 说:

Multiple markers at this line
- Implicit arguments found: => 
 ( scalaz.Functor.Tuple2Functor )
- type mismatch; found : (Seq[B], A) required: (A, A)
- Implicit conversions found: => Tuple2MA()

如何更改此代码以使其编译?

4

1 回答 1

2

作为仍在学习 Scala 的人,我从来没有遇到过这个问题(尽管这是关于implicits 的一件可怕的事情,因为它们看起来很酷,所以没有人谈论过),但我认为你有几个选择:

  • 通过以这样implicit的方式将其别名为类似于_导入中的东西(仅在implicit不在特征中时才有效)来禁用您不想要的东西。
  • implicit用非implicit同名方法覆盖。
  • 只是不要导入隐式转换。如果需要,编写自己的代码来做同样的事情。
于 2013-12-21T17:49:26.597 回答