Czy możliwe jest wykorzystanie niejawnych konwersji parametrów w ekstraktorach (nie dotyczy) w Scali?

Stworzyłem klasę o nazwie CaseInsensitive, która otacza łańcuch (patrzImplementacja klasy łańcuchowej, która nie uwzględnia liter w Scali).

Stworzyłem klasę case, która ma zmienną składową typu CaseInsensitive, więc pobiera domyślną metodę unapply, która wyodrębnia zmienną typu CaseInsensitive, ale miałem nadzieję, że użyję jej w ten sposób:

case class PropertyKey( val name : CaseInsensitive )

val foo = new PropertyKey("foo")
val result = foo match {
  case PropertyKey("foo") => true
  case _ => false
}

Kod ten nie kompiluje się: (w linii ekstraktora, a nie w linii konstruktora)

type mismatch;
 found   : java.lang.String("foo")
 required: com.acme.CaseInsensitive 

Ale myślałem, że moje niejawne konwersje z String na CaseInsensitive umożliwią to skompilowanie, a nie konieczność pisania bardziej szczegółowego:

case class PropertyKey( val name : CaseInsensitive )

val foo = new PropertyKey("foo")
val result = foo match {
  case PropertyKey(CaseInsensitive("foo")) => true
  case _ => false
}

Oto implementacja funkcji CaseInsensitive:

/** Used to enable us to easily index objects by string, case insensitive
 * 
 * Note: this class preserve the case of your string!
 */
case class CaseInsensitive ( val _s : String ) extends Proxy {
  require( _s != null)

  val self = _s.toLowerCase
  override def toString = _s

  def i = this // convenience implicit conversion
}

object CaseInsensitive {
  implicit def CaseInsensitive2String(c : CaseInsensitive) = if ( c == null ) null else c._s
  implicit def StringToCaseInsensitive(s : String) = CaseInsensitive(s)

  def fromString( s : String ) = s match {
    case null => None
    case _ => Some(CaseInsensitive(s))
  }
}

questionAnswers(1)

yourAnswerToTheQuestion