E214: Illegal Context Bounds

E214: Illegal Context Bounds

이 에러는 컨텍스트 바운드(context bound)가 허용되지 않는 위치에 사용되었을 때 발생해요.

출처: Scala 3 Reference

본문

컨텍스트 바운드(예: T: Ordering)는 타입 파라미터에 대해 타입 클래스의 암시적 인스턴스를 요구하는 축약 표기예요. 하지만 컨텍스트 바운드는 메서드나 클래스 타입 파라미터 같은 특정 위치에서만 사용할 수 있고, 타입 별칭 정의에서는 사용할 수 없어요.

예시 (Example)

trait Equatable[T]

type Foo[T: Equatable]

에러 (Error)

-- [E214] Syntax Error: example.scala:3:21 -------------------------------------
3 |type Foo[T: Equatable]
  |            ^^^^^^^^^
  |            Context bounds are not allowed in this position

해결 방법 (Solution)

컨텍스트 바운드는 암시적 파라미터를 추가할 수 있는 메서드나 클래스 정의에서 허용돼요.

trait Equatable[T]

def foo[T: Equatable](value: T): Unit = ()
trait Equatable[T]

class Foo[T: Equatable](value: T)

타입 별칭에서는 컨텍스트 바운드를 사용할 수 없어요. 제약을 표현할 필요가 있다면 클래스나 트레이트를 사용하는 것을 고려해 봐요.

trait Equatable[T]

trait Foo[T]:
  given Equatable[T] = ???