sbt の依存関係として eff
を追加する。
libraryDependencies += "org.atnos" %% "eff" % "5.16.0-SNAPSHOT"
//(任意)Reader[String, *] のように型を書きたければ
addCompilerPlugin("org.typelevel" %% "kind-projector" % "0.11.3" cross CrossVersion.full)
Reader[String, *]
(1つ以上の型パラメーター)のような型を正確に推論してほしければ、以下のコンパイラーオプションを使う必要がある。
scalacOptions += "-Ypartial-unification"
この表はその他に利用できる eff モジュールを記載している。
名前 | 機能 |
---|---|
eff-scalaz |
関数型プログラミングのためのライブラリとして
Scalaz
を使いたいとき。このモジュールは
Eff 用の
Scalaz
Monad インスタンスと、Scalaz の
\/
エフェクトを提供する。
|
eff-monix |
Monix の
Task エフェクトを使いたいとき。
|
eff-cats-effect |
cats の
IO エフェクトを使いたいとき。
|
eff-twitter |
Twitter の Future
エフェクトを使いたいとき。
|
eff-doobie |
Doobie の
ConnectionIO
エフェクトを使いたいとき。
|
eff
の主要な型:
Eff
,
Member
,
Fx
は
org.atnos.eff
パッケージで利用できる。
import org.atnos.eff._
多くの他のエフェクトも コアライブラリに組み込みなのですぐに利用できる.
エフェクトを作成するのに使われる関数は、エフェクトの型にちなんだ様々なオブジェクトのもとでグループ化されている。例えば
Eval
エフェクトを使いたいときには、次のようにインポートする。
import org.atnos.eff.eval._
ほとんどのエフェクトを一度にインポートすることもできる。
import org.atnos.eff.all._
1つ前のインポートに含まれていないエフェクトとその理由は次のとおり。
Error
エフェクト。このエフェクトは「失敗」を表す型をパラメーターとして必要であり、ライブラリのユーザーが指定しなければならない。
Future
エフェクト。このエフェクトは
runAsync
のようないくつかの操作を他の「非同期」エフェクト(例えば Monix の
TaskEffect
)と共有しており、インポートが
import org.atnos.eff.addon.monix.task._
と衝突してしまう。
エフェクトを解釈するには通常、与えられたエフェクトを
run(実行)するためのシンタックスをいくらか必要とする。例えば、Option
エフェクトを run するためには、次のインポートをする。
// エフェクトを作成するため
import org.atnos.eff.option._
// runOption メソッドにアクセスするため
import org.atnos.eff.syntax.option._
fromOption(Option(1)).runOption
すべてのシンタックスに一度にアクセスすることもできる。
import org.atnos.eff.syntax.all._
関数型プログラミングライブラリとして Scalaz を使うなら、Scalaz に固有の作成メソッドを使うために追加のインポートが必要になるだろう。例えば、
import org.atnos.eff.addon.scalaz.either._
fromDisjunction(\/-(1))
このようなメソッドを一度にすべてインポートするための
all
オブジェクトもある。
import org.atnos.eff.addon.scalaz.all._
fromDisjunction(\/-(1))
すでにご想像のとおり、同じパターンでシンタックスのインポートもある。
import org.atnos.eff.addon.scalaz.either._
import org.atnos.eff.addon.scalaz.syntax.either._
fromDisjunction(\/-(1)).runDisjunction