타입과 트레이트는 implicit일 수 없음

타입과 트레이트는 implicit일 수 없음 (Types And Traits Cannot Be Implicit)

타입 별칭이나 트레이트 정의에 implicit 수식어를 붙였을 때 나오는 에러예요.

출처: Scala 3 Reference

본문

타입 별칭(type alias)이나 트레이트 정의에 implicit 수식어를 사용하면 이 에러가 발생해요.

implicit 수식어는 값, 메서드, 그리고 (implicit 변환을 위한) 클래스에만 쓸 수 있어요. 타입과 트레이트는 암시적으로 전달될 수 있는 값을 나타내는 게 아니므로 implicit이 될 수 없어요.

예시

implicit trait MyTrait

에러 메시지

-- [E062] Syntax Error: example.scala:1:15 -------------------------------------
1 |implicit trait MyTrait
  |^^^^^^^^^^^^^^^^^^^^^^
  |implicit modifier cannot be used for types or traits

해결 방법

// Remove implicit from trait definitions
trait MyTrait

// Use given instances instead
given myInstance: MyTrait = new MyTrait {}
// For implicit conversions, use a given Conversion
trait Target
class Source

given Conversion[Source, Target] = (s: Source) => new Target {}

더 알아보기

  • implicit 변환이 필요하다면 트레이트 대신 given Conversion[Source, Target] 인스턴스를 쓰면 돼요.