1

Scalaz を使ってコードを書いていると、スコープに暗黙的なものがないという問題に遭遇することがよくあります。膨大なパッケージの scalaz のどこかにデフォルトの暗黙関数がいくつかあるはずだと思いますが、どこにあるかわからないか、まったくありません。

showscalaz でanyを使いたいとします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]ます。

4

1 に答える 1

7

Showタイプを静的に知っている場合にのみ役立ちます。あなたが持っていることだけを知っている場合は、Any電話してくださいa.toString.

必要に応じShow[String]てインポートしscalaz.std.string._ます。と の両方Show[List[String]]インポートする必要があるためです。 scalaz.std.list._scalaz.std.string._

または、標準ライブラリに提供されているすべての型クラス インスタンスを .xml でインポートすることもできますscalaz.std.AllInstances._

これは、@eed3si9n の優れたLearning Scalaz シリーズで段階的に説明されています。

Scalaz の良いガイドもここにあります:

優れた scalaz の紹介

于 2012-11-18T21:58:35.823 に答える