E191: Match Type Legacy Pattern — match type의 레거시 패턴
E191: Match Type Legacy Pattern — match type의 레거시 패턴
match type 패턴이 반변(contravariant) 위치에서 고려되지 않은 타입 파라미터를 가진 불법적인 case를 포함할 때 발생하는 에러예요.
본문
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예요.