2016-12-30 6 views
2

Я пытаюсь узнать, как вложить монады с помощью MonadTransformers в библиотеку кошек.Коты Monad Transformers

Так что я пытаюсь создать тип данных, либо для [String, Option [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) 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^