[英]global, default implicits in scalaz (scalaz7)
當我使用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]
。
僅當您靜態知道類型時, Show
才有用。 如果您僅知道自己具有Any
,則只需調用a.toString.
如果要Show[String]
,請導入scalaz.std.string._
; 用於Show[List[String]]
您需要同時導入scalaz.std.list._
和scalaz.std.string._
。
或者,您可以使用scalaz.std.AllInstances._
導入標准庫的所有提供的類型類實例。
這在@ eed3si9n的出色的Learning Scalaz系列中逐步進行了解釋。
這里也為Scalaz提供了一些很好的指南:
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.