2016-12-30 9 views
2

私は猫ライブラリーのMonadTransformersを使ってモナドをネストする方法を学ぼうとしています。だから私はどちらかのデータ型を構築しようとしています猫Monadトランスフォーマー

[文字列、オプション[]]

これは私が

import cats.data.OptionT 
import cats.instances.list._ 
import cats.syntax.applicative._ 

object Ex11 extends App { 
    type ErrorEither[A] = Either[String, A] 
    type ErrorOrOption[A] = OptionT[ErrorEither, A] 
    val x = 42.pure[ErrorOrOption] 
    println(x) 
} 

を書かれている。しかし、私はエラー

を取得するコードです
[error] Ex11.scala:13: could not find implicit value for parameter F: cats.Applicative[Ex11.ErrorOrOption] 
[error] val x = 42.pure[ErrorOrOption] 
[error]     ^

Xorを使用していたサンプルからこれを取り出しましたが、最新のcatsライブラリではXorが削除されています。

+1

私は 'cats.implicits._'をインポートし、必要に応じてimplicitsを制限します。 – Reactormonk

+1

ドキュメントには、基礎となるモナドをインポートする必要があると言われています。 –

答えて

3

私はあなたが猫のインスタンスのインポートが欠けていると思われる:

import cats.instances.either._ 

(またimport cats.instances.list._の輸入がここに余分のようです。)

以下はコンパイルする必要があります

import cats.data.OptionT 
import cats.instances.either._ 
import cats.syntax.applicative._ 

object Ex11 extends App { 
    type ErrorEither[A] = Either[String, A] 
    type ErrorOrOption[A] = OptionT[ErrorEither, A] 
    val x = 42.pure[ErrorOrOption] 
    println(x) 
} 
関連する問題