не срабатывать базовый инференс?
None.pure[ConnectionIO]
Иногда срёт вот таким
error] found : doobie.free.connection.ConnectionIO[None.type]
[error] (which expands to) cats.free.Free[doobie.free.connection.ConnectionOp,None.type]
[error] required: cats.free.Free[doobie.free.connection.ConnectionOp,Option[Example]]
[error] Note: None.type <: Option[Example], but class Free is invariant in type A.
[error] You may wish to define A as +A instead. (SLS 4.5)
[error] case None => None.pure[ConnectionIO]
Лечится очень просто через Option.empty[Example].pure[ConnectionIO], и писать так не то, чтобы очень впадлу
просто интересно
Это не дуби беда, это беда опшна
Попробуй F.pure(None)
потому что скаловый компилятор недостаточно умный, и в некоторых случаях ему нужна помощь с типами. минимальный пример чтобы репродьюснуть вашу проблему: List(1,2,3).foldLeft(Nil){ (acc, curr) => curr :: acc } попробуйте запустить этот пример в REPL, и он упадет, потому что компилятор не может сам до конца извлечь типы. как это обходится: 1. вызвать метод и явно передать тайп параметр List(1,2,3).foldLeft[List[Int]](Nil){ (acc, curr) => curr :: acc } 2. явно указать желаемый тип аргумента (вроде в данном случае это называется type widening) List(1,2,3).foldLeft(Nil: List[Int]){ (acc, curr) => curr :: acc } 3. вызвать конструктор желаемого типа напрямую, с указанием типа List(1,2,3).foldLeft(List[Int]()){ (acc, curr) => curr :: acc }
Обсуждают сегодня