簡體   English   中英

全局,scalaz中的默認隱式(scalaz7)

[英]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提供了一些很好的指南:

好scalaz介紹

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM