インストール

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 MonixTask エフェクトを使いたいとき。
eff-cats-effect catsIO エフェクトを使いたいとき。
eff-twitter Twitter の Future エフェクトを使いたいとき。
eff-doobie DoobieConnectionIO エフェクトを使いたいとき。

インポート

主要な型

eff の主要な型: Eff, Member, Fxorg.atnos.eff パッケージで利用できる。

import org.atnos.eff._

多くの他のエフェクトも コアライブラリに組み込みなのですぐに利用できる.

エフェクトを作成する

エフェクトを作成するのに使われる関数は、エフェクトの型にちなんだ様々なオブジェクトのもとでグループ化されている。例えば Eval エフェクトを使いたいときには、次のようにインポートする。

import org.atnos.eff.eval._

ほとんどのエフェクトを一度にインポートすることもできる。

import org.atnos.eff.all._

1つ前のインポートに含まれていないエフェクトとその理由は次のとおり。

エフェクトを解釈する

エフェクトを解釈するには通常、与えられたエフェクトを 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 を使うなら、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