当我使用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]。
发布于 2012-11-18 21:58:35
只有在静态地知道类型时,Show才有用;如果您只知道您有Any,只需调用a.toString.即可。
如果您想要Show[String],请导入scalaz.std.string._;对于Show[List[String]],您需要同时导入scalaz.std.list._和scalaz.std.string._。
或者,您可以使用scalaz.std.AllInstances._导入标准库所提供的所有类型类实例。
这是在@eed3si9n的优秀学习Scalaz系列中逐步解释的。
这里还有一些关于Scalaz的好指南:
https://stackoverflow.com/questions/13443971
复制相似问题