List[T[_]].sequence와 마찬가지로, List.sequence를 원합니다.
List[T[U]]
와 같은List의 끼워넣기식 매개 변수 (주) 만 가져오면 .sequence
로 변환할 수 있습니다.import cats.implicit._
val xs: List[Future[String]] = ...
xs.sequence // Future[List[String]]
주) 엄격히 상속해야 한다T[List[U]]
그러나 2.12 이전의 scala의 경우 Either는 두 가지 유형의 매개 변수가 있는데 이렇게 하면 안 된다Apprecative[_]
.val xs: List[Either[E, String]] = ...
xs.sequence // compiler error!
먼저 모듈 별명을 붙여서 컴파일할 수 있지만 귀찮아요.type MyEither[T] = Either[MyError, T]
val xs: List[MyEither[String]] = ...
xs.sequence // MyEither[List[String]]
그런데 대단해요. 컴파일러 옵션만 추가하면 신기해요.build.sbt
scalacOptions += "-Ypartial-unification"
val xs: List[Either[MyError, String]] = ...
xs.sequence // Future[Either[MyError, String]]
.sequence
사용하기 좋은 것 같아요."partial-unification"이 뭐예요?
여러 유형의 매개변수를 선택하는 유형이 있는 경우 컴파일러에서 유형 매개변수의 최오른쪽을 유일한 유형 매개변수와 동일한 옵션으로 간주합니다.
.sequence
에서 보듯이 본명이 오른쪽인 유형 파라미터의 유형은 유효하지만 본명이 왼쪽인 유형 파라미터의 유형에서는 잘못된 추론이 발생할 수 있으므로 주의해야 한다.
Reference
이 문제에 관하여(List[T[_]].sequence와 마찬가지로, List.sequence를 원합니다.), 우리는 이곳에서 더 많은 자료를 발견하고 링크를 클릭하여 보았다 https://zenn.dev/service_503/articles/6928147501e9bf텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
우수한 개발자 콘텐츠 발견에 전념 (Collection and Share based on the CC Protocol.)