当我使用 Scalaz 进行编码时,我经常遇到问题,即范围没有隐含。我认为在庞大的 scalaz 包中应该有一些默认的隐含,但要么我不知道在哪里,要么没有。
假设我们想要show
任何Any
scalaz (我使用的是 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不提供它?使用一些 global 的好方法是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]
.