ΛВ
То есть когда скала выводит типы для выражения 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