E191: Match Type Legacy Pattern — match type의 레거시 패턴

E191: Match Type Legacy Pattern — match type의 레거시 패턴

match type 패턴이 반변(contravariant) 위치에서 고려되지 않은 타입 파라미터를 가진 불법적인 case를 포함할 때 발생하는 에러예요.

출처: Scala 3 Reference

본문

match type에서 패턴으로부터 추출된 타입 파라미터는 적절히 처리되어야 해요. 타입 파라미터가 반변 위치(예: Consumer[-T] 안)에 나타나면 컴파일러가 안정적으로 추출할 수 없어요.

예시 (Example)

class Consumer[-T]

type Illegal[X] = X match
  case Consumer[List[t]] => t

에러 (Error)

-- [E191] Type Error: example.scala:3:20 ---------------------------------------
3 |type Illegal[X] = X match
  |                  ^
  |                  The match type contains an illegal case:
  |                      case Consumer[List[t]] => t
  |                  The pattern contains an unaccounted type parameter `t`.
  |                  (this error can be ignored for now with `-source:3.3`)
  |
4 |  case Consumer[List[t]] => t

해결 방법 (Solution)

공변(covariant) 위치에서 타입 파라미터를 추출하세요:

class Consumer[-T]

// Extract from covariant position (List is covariant)
type Legal[X] = X match
  case List[t] => t

또는 반변 타입 추출을 피하도록 타입 구조를 재설계하세요:

class Producer[+T]

// Type parameter in covariant position
type Extract[X] = X match
  case Producer[t] => t

더 알아보기

match type에서 타입 파라미터는 안정적으로 추출할 수 있는 공변 위치에서 뽑아야 해요. 반변 위치에서 뽑는 건 불법 case예요.