Создайте OptionT[Future, A] из нижестоящего типа

Я довольно новичок в скалазе, и я пытаюсь понять, как преобразовать различные типы в монадные преобразователи.

Я застрял при попытке преобразовать Int к OptionT[Future, Int]или даже EitherT[Future, String, Int],

Я нашел кучу уроков /SO ответов, которые объясняют, как это сделать, используя point, но по какой-то причине я не могу их скомпилировать.

Например, этот фрагмент отсюда:

1.point[({ type L[x] = EitherT[Future, String, x] })#L]

Ошибка:(9, 9) не удалось найти неявное значение для параметра доказательства типа scalaz.Applicative[[x]scalaz.EitherT[scala.concurrent.Future,String,x]]

Еще один из Скалаз Монад Трансформеры

type Result[A] = OptionT[Future, A]
"".point[Result]

Ошибка:(8, 10) не удалось найти неявное значение для параметра доказательства типа scalaz.Applicative[A$A35.this.Result]

Я считаю, что это должно работать, но это говорит метод liftM не является членом Future[Int]:

1.point[Future].liftM[OptionT]    //doesnt compile
1.point[List].liftM[OptionT]      //compiles

Все эти примеры терпят неудачу, но они компилируются, если я заменяю Future с, скажем, List, Прямо сейчас, это единственный способ, который работает для меня, но это немного многословно - я бы очень хотел иметь возможность использовать point вместо:

OptionT(Future.successful(1.some))

Почему это не компилируется? Был аппликатив / монада для Future удален из скаляза в последней версии?

Я использую scala 2.11.7 и scalaz 7.1.3. Для чего это стоит, это мой импорт:

import scala.concurrent.Future
import scalaz._
import Scalaz._

1 ответ

Решение

Импорт ExecutionContext сделаю ваши решения компилировать, смотрите scalaz.std.scalaFuture,

import scala.concurrent.ExecutionContext.Implicits.global

type Result[A] = OptionT[Future, A]
"".point[Result]
// Result[String] = OptionT(scala.concurrent.impl.Promise$DefaultPromise@5e155fc)

1.point[Future].liftM[OptionT]
// scalaz.OptionT[scala.concurrent.Future,Int] = OptionT(scala.concurrent.impl.Promise$DefaultPromise@60821af9)
Другие вопросы по тегам