4

簡単な質問です。私はすでにこれを見てきました: Scalaz7 でインポートを管理していますが、 のインスタンスを構築するためにrightとメソッドをオブジェクトに最小限に注入する方法がわかりません。left\/

私は試しました:

import syntax.ToDataOpshttp://eed3si9n.com/learning-scalaz-day13で提案されているTo...ようなその他のバリエーション。syntax.ToIdOps

簡単な例:

import scalaz.{\/, syntax}
import // What goes here

class Test {

    def returnEitherT(h: Int): String \/ Int = {
        h right
    }
}

ありがとう、ジェイソン。

===========

を使用して解決しましたimport syntax.id._が、なぜこれが機能したのかわかりません。

4

2 に答える 2

4

syntax.id「プレーンな」値の構文を含みます。つまり、値の型に制約を課しません。

一般に、フォームの式の構文をインポートする場合x.op、構文をインポートする場所は のタイプによって異なります。これは、 がそのタイプで有効な操作である必要があるためですxop

\/[A, B]は A と B に対して普遍的に量化されるため、構文を使用してx.leftx.right型に制約を課しませんx。したがって、 に属しsyntax.idます。

どの構文がどこで使用できるかを実際に理解するには、syntaxパッケージを構成するいくつかのモジュールのソースを調べる価値があります。たとえば、contrastIdOps[A]は any の構文を持ち、Awithは.FunctorOps[F[_],A]FFunctor


名前のid由来は正確にはわかりません。Idおそらくそれは、 として定義できる恒等関手 に関連していtype Id[A] = Aます。で使用可能な値の型制約を選択する必要syntax.idがある場合は、Id. では普遍的に量化されてAいるため、操作は の値の構造を知ることがAできないため、 の構造変更操作にはなりませんA

于 2013-04-25T11:09:11.710 に答える
2

scalaz 7 以降、正しいインポートは次のとおりです。

import scalaz.syntax.either._
于 2015-06-17T08:47:21.213 に答える