от
обзор Я пытаюсь вывести видах
cats.data.IndexedStateT[F[_], SA, SB, A]
, переданный в метод flatMap. Когда просто используешь помощью flatMap, определение типа подтверждается параметры Тип для SA, SB и правильно. Однако, когда я использую карту в помощью flatMap это не удается. Есть ли способ, чтобы сделать этот вывод типов работает без ручное указание параметров типа для IndexedStateT перешла в помощью flatMap?
class X
class Y


// Type inference works well when just using flatMap
val res1: IndexedStateT[Eval, Unit, Y, Y] =
    IndexedStateT[Eval, Unit, X, X](_ => Eval.now(new X, new X))
      .flatMap { x =>
        IndexedStateT(_ => Eval.now(new Y, new Y)) // Infers IndexedStateT[Eval, X, Y, Y]
      }


// Type inference fails when mapping inside flatMap
val res2: IndexedStateT[Eval, Unit, Y, (X, Y)] =
    IndexedStateT[Eval, Unit, X, X](_ => Eval.now(new X, new X))
      .flatMap { x =>
        IndexedStateT(_ => Eval.now(new Y, new Y)).map(x 

Контекст использования 

Я использую специализированный тип государства монады в коде приложения 

type HListState[SA <: HList, A] = IndexedStateT[Eval, SA, A :: SA, A]
  object HListState {
    def apply[SA <: HList, A](fn: SA => A): HListState[SA, A] = IndexedStateT[Eval, SA, A :: SA, A](sa => Eval.now((fn(sa) :: sa, fn(sa))))
  }

// Type inference works here
val res3: IndexedStateT[Eval, HNil, Y :: X :: HNil, Y] =
  HListState[HNil, X](_ => new X).flatMap { x =>
    HListState(_ => new Y)
  }

// Inference not so good :(
val res4: IndexedStateT[Eval, HNil, Y :: X :: HNil, (X, Y)] = 
  HListState[HNil, X](_ => new X).flatMap { x =>
    HListState(_ => new Y).map(x 

Есть ли способ, чтобы получить вывод типа работают в этом случае?

Ваш ответ

Отображаемое имя (по желанию):
Конфиденциальность: Ваш электронный адрес будет использоваться только для отправки уведомлений.
Анти-спам проверка:
Чтобы избежать проверки в будущем, пожалуйста войдите или зарегистрируйтесь.
Добро пожаловать на сайт ByNets, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...