-
Variance 문제scala/basic 2021. 10. 22. 21:30
scala 에서 이해하기 가장 어려운 부분 중 하나가 Variance 일 것이다.
Variance 를 이해 했다면 다음 문제를 풀어보자.
문제1
아래와 같이 정의했을 때
trait Sum[+A, +B] { def flatMap[C](f: B => Sum[A, C]): Sum[A, C] = ??? }
다음과 같은 에러 메시지를 보게 될 것이다.
error: covariant type A occurs in contravariant position in type B => Sum[A,C] of value f
이를 해결하려면 어디를 수정해야 할까?
아래와 같이 작성하면 된다. (Why?)
trait Sum[+A, +B] { def flatMap[T >: A, C](f: B => Sum[T, C]): Sum[T, C] = ??? }
문제2
아래 정의는 아무 문제가 없다. (Why?)
trait Cat[-A, +B] { def meow(volume: A, listener: Cat[B, A]) : Cat[Cat[B, A], B] }
참고
https://books.underscore.io/essential-scala/essential-scala.html#variance
https://blog.rockthejvm.com/scala-variance-positions/
https://blog.knoldus.com/covariance-and-contravariance-in-scala/
'scala > basic' 카테고리의 다른 글
scala 에서 retry 구현하기 (0) 2021.11.25 scala enumeratum enum 사용하기 (0) 2021.11.13 apache poi 를 사용해 scala 에서 Excel 파일 읽기 (0) 2021.10.14 Scala State Monad (3) 2021.08.03 Pattern Match 조합 - Email 주소 예제 (0) 2021.07.27