type MapReaderOrOption[A] = ReaderT[Option, Map[String,String], A]
implicit class toReader[F[_],T](f: F[T]) {
def asReaderT[K] = ReaderT[F,K,T](_ => f)
}
def f:MapReaderOrOption[Int] = Option(10).asReaderT
или в случае, если тип f
не указан явно, необходимо определить параметр K
.
def f = Option(10).asReaderT[Map[String,String]]
Так что теперь тип для f
будет выведен на ReaderT[Option, Map[String,String], Int]
. Я думаю, вам даже не нужен псевдоним типа в этом случае.
или еще одна альтернатива
def f = Option(10).asReaderT:MapReaderOrOption[Int]