unapply

Jakie są ograniczenia w wnioskowaniu typów o wyższym pokrewieństwie w Scali?

W następującym uproszczonym kodzie próbki: case class One[A](a: A) // An identity functor case class Twice[F[_], A](a: F[A] ... ograniczona i musi być dość irytująca w monad transformers, więc podejrzewam, że brakuje mi jakiejś sztuczki, aby to obejść.

Jaka jest różnica między unapplyseq a unapplyseq?

Dlaczego Scala ma zarówno unapply jak i unapplySeq? Jaka jest różnica między nimi? Kiedy powinienem preferować jedno nad drugim?