Ieri sera nel rispondere alle this question, ho notato quanto segue:Impostare il tipo di sequenza di puzzle
scala> val foo: Option[Set[Int]] = Some(Set(1, 2, 3))
foo: Option[Set[Int]] = Some(Set(1, 2, 3))
scala> import scalaz._, Scalaz._
import scalaz._
import Scalaz._
scala> foo.sequenceU
res0: scala.collection.immutable.Set[Int] = Set(1, 2, 3)
Cioè, se foo
è un set opzionale di numeri interi, sequenziamento restituisce un insieme di numeri interi.
Questo non è quello che mi aspettavo in un primo momento, dal momento che il sequenziamento di un F[G[A]]
dovrebbe restituire un G[F[A]]
(supponendo che F
è attraversabile e G
is an applicative functor). In questo caso, tuttavia, il livello Option
scompare.
So che questo probabilmente ha qualcosa a che fare con qualche interazione tra uno dei supertipi di Set
e la macchina che fa Unapply
sequenceU
il lavoro, e quando posso trovare qualche minuto ho intenzione di lavorare attraverso i tipi e scrivere una descrizione di cosa sta succedendo.
Sembra un piccolo rompicapo potenzialmente interessante, tuttavia, e ho pensato di pubblicarlo qui nel caso qualcuno mi potesse battere per una risposta.