2016-12-30 3 views
2

고양이 라이브러리에서 MonadTransformers를 사용하여 모나스트를 중첩시키는 법을 배우려고합니다. 고양이 모나드 변압기

그래서 내가 하나의 데이터 유형을 구축을 위해 노력하고 있어요 [문자열, 옵션 [A]는]

이것은 내가

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을 사용하는 샘플에서 가져 왔지만 최신 고양이 라이브러리는 Xor을 삭제했습니다.

+1

'cats.implicits._'을 가져 와서 필요에 따라 함축을 제한합니다. – Reactormonk

+1

문서에서는 기본 모나드를 가져와야한다고 말합니다. –

답변

3

난 당신이 고양이 인스턴스의 수입 누락 의심 : (. 또한 import cats.instances.list._의 수입 여기에 불필요한 것 같다)

import cats.instances.either._ 

다음은 컴파일해야합니다

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) 
}