【发布时间】:2014-03-30 18:24:41
【问题描述】:
当我使用 Scalaz 进行编码时,我经常遇到问题,即范围没有隐式。我认为在庞大的 scalaz 包中应该有一些默认的隐含,但要么我不知道在哪里,要么没有。
假设我们想在scalaz中show任何Any(我使用的是scalaz 7):
scala> import scalaz._
import scalaz._
scala> import Scalaz._
import Scalaz._
scala> {def a: Any = "sratatata"; a}.show
<console>:14: error: could not find implicit value for parameter F0: scalaz.Show[Any]
{def a: Any = "sratatata"; a}.show
^
这不起作用,因为范围内没有隐式Show[Any]。
为什么 Scalaz 不提供它?使用一些全局Show[A] 的好方法是什么?我的意思是这样的:
scala> implicit def anyShow[A] = Show.showFromToString[A]
anyShow: [A]=> scalaz.Show[A]
scala> {def a: Any = "sratatata"; a}.show
res0: scalaz.Cord = sratatata
我认为Equal也是如此。
编辑
我已尝试按照答案中的说明添加import scalaz.syntax.ShowSyntax,但这并不能解决我的问题。见:
scala> import scalaz._
import scalaz._
scala> import Scalaz._
import Scalaz._
scala> import scalaz.syntax._
import scalaz.syntax._
scala> import scalaz.syntax.ToShowOps
import scalaz.syntax.ToShowOps
scala> import scalaz.syntax.ShowSyntax
import scalaz.syntax.ShowSyntax
scala> {def a: Any = "sratatata"; a}.show
<console>:19: error: could not find implicit value for parameter F0: scalaz.Show[Any]
{def a: Any = "sratatata"; a}.show
编译器仍然需要一些implicit scalaz.Show[Any]。
【问题讨论】: