Почему полугруппа скалаза не ковариантна?
Это простой смысл, почему Scalaz SemiGroup не является ковариантным:
https://github.com/scalaz/scalaz/blob/series/7.1.x/core/src/main/scala/scalaz/Semigroup.scala
Благодарю.
1 ответ
Как это могло произойти? параметр типа появляется как в ковариантной, так и в контравариантной позиции (результат и аргумент) в основной операции полугруппы, append
так что оно не может быть ни ковариантным, ни контравариантным
Просто чтобы привести простой контрпример, рассмотрим Seq[Int]
(Int
это просто исправить тип, может быть что угодно). Вы можете легко определить полугруппу там, с append
являющийся ++
, Теперь Option не расширяет Seq, но было бы легко организовать опциональный тип, который расширяет Seq (или даже просто тип case class Single[A](a: A) extends Seq[A]
). Полугруппа Seq[Int]
ни в коем случае не может быть полугруппой Option[Int] или Single[Int], добавление двух вариантов не дает опцию, ни добавление двух синглов.