首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >全局的,默认的在金刚石中嵌入(scalaz7)

全局的,默认的在金刚石中嵌入(scalaz7)
EN

Stack Overflow用户
提问于 2012-11-18 19:54:01
回答 1查看 887关注 0票数 1

当我使用Scalaz编写代码时,我经常会遇到问题,在范围上没有隐含的问题。我认为在巨大的软件包中应该会有一些默认的提示,但是我不知道哪里或者根本没有。

假设我们想在show中使用Any (我使用的是scalaz 7):

代码语言:javascript
复制
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]的好方法吗?我的意思是这样的:

代码语言:javascript
复制
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,但这并不能解决我的问题。请参见:

代码语言:javascript
复制
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]

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 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的好指南:

好黄曲柳游戏攻略

票数 7
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13443971

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档