12

プロジェクトでscalaz7を使用していますが、インポートで問題が発生することがあります。始める最も簡単な方法は

import scalaz._
import Scalaz._

ただし、これにより競合が発生する場合があります。私が今までやってきたことは、次の少し苦痛なプロセスです。

  • 私の実際のコードと同じインポートを必要とする最小限の例を考え出す
  • その例を別のプロジェクトにコピーする
  • -Xprint:typer暗黙の解決後にコードがどのように見えるかを調べるオプションを使用してコンパイルします
  • 元のプロジェクトに必要な暗黙をインポートします。

これは機能しますが、合理化したいと思います。scalaz7にはもっときめ細かいインポートがあるようですが、それらがどのように編成されているかを完全には理解していません。たとえば、私は1つができると思います

import scalaz.std.option._
import scalaz.std.AllInstances._
import scalaz.std.AllFunctions._
import scalaz.syntax.monad._
import scalaz.syntax.all._
import scalaz.syntax.std.boolean._
import scalaz.syntax.std.all._

等々。

これらのサブインポートはどのように編成されていますか?

例として、検証を処理したいとします。たとえば、検証インプリシットを挿入して次のコンパイルを行うには、何が必要ですか?

3.fail[String]

ValidationNEL[A, B]のインスタンスを作成するのはApplicativeどうですか?

4

1 に答える 1

9

このブログ投稿では、パッケージ構造について説明し、scalaz7にアラカルトを詳細にインポートしています:http://eed3si9n.com/learning-scalaz-day13

特定の例では、3.failure[String]の場合に必要なものは次のとおりです。

import scalaz.syntax.validation._

検証にはすでにメソッドがありますap

scala> "hello".successNel[Int] ap ((s: String) => "x"+s).successNel[Int]
res1: scalaz.Validation[scalaz.NonEmptyList[Int],java.lang.String] = Success(xhello)

<*>演算子を取得するには、次のインポートが必要です。

import scalaz.syntax.applicative._

次に、次のことができます。

"hello".successNel[Int] <*> ((s: String) => "x"+s).successNel[Int]
于 2012-11-13T13:02:49.210 に答える