簡體   English   中英

為什么scalaz Semigroup不協變?

[英]Why scalaz Semigroup is not covariant?

為什么Scalaz SemiGroup不協變是他們的簡單理由?

https://github.com/scalaz/scalaz/blob/series/7.1.x/core/src/main/scala/scalaz/Semigroup.scala

https://github.com/scalaz/scalaz/blob/series/7.1.x/core/src/main/scala/scalaz/syntax/SemigroupSyntax.scala

謝謝。

怎么會這樣? 類型參數在semigroup的main操作append中同時出現在協變和協變位置(結果和自變量),因此它既不能協變也不能協變

僅舉一個簡單的反例,考慮Seq[Int]Int只是用來修復類型,可以是任何東西)。 您可以輕松地在其中定義一個半群,其append++ 現在Option不擴展Seq,但很容易安排一個類似於選項的類型來擴展Seq(甚至只是類型為case class Single[A](a: A) extends Seq[A] )。 Seq[Int]Seq[Int]不能是Option [Int]或Single [Int]的半組,附加兩個選項不會給出一個選項,也不會附加兩個單值。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM