ΛВ
То есть когда скала выводит типы для выражения None, она его выводит именно как None.type, потому что не всегда возможно вывести тип А в Option[A]
Size: a a a
ΛВ
วโ
E
E
E
E
AS
None.pure[ConnectionIO]
ror] found : doobie.free.connection.ConnectionIO[None.type]Лечится очень просто через Option.empty[Example].pure[ConnectionIO], и писать так не то, чтобы очень впадлу
[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]
F.pure(None)AS
Option.empty[Example] можно none[Example]λ
λ
λ
E
None.pure[ConnectionIO]
ror] found : doobie.free.connection.ConnectionIO[None.type]Лечится очень просто через Option.empty[Example].pure[ConnectionIO], и писать так не то, чтобы очень впадлу
[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]
List(1,2,3).foldLeft(Nil){ (acc, curr) => curr :: acc }
попробуйте запустить этот пример в REPL, и он упадет, потому что компилятор не может сам до конца извлечь типы. как это обходится: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 }E
List(1,2,3).foldLeft(List.empty[Int]){ (acc, curr) => curr :: acc }E
K
AS
K
AS