Bifunctor에 대한 매개 변수화 된 유형 별칭

끝 New

나는 a가 Seq[R]있고 이것을으로 나누고 싶습니다.이를 Tuple2[Seq[E], Seq[S]]코딩하는 동안 Bifunctorseq의 튜플에 대해 사용자 정의 사용할 수 있다는 사실에 대해 생각 하고 연습하면서 이것을 코딩하려고했습니다.

import scalaz.Bifunctor

type MyType[E, S] = (Seq[E], Seq[S])

case class MyVali[E, S](tp: (Seq[E], Seq[S]))(implicit bifunctor: Bifunctor[MyType]) {
  def bimap[C, D](f: (E) => C, g: (S) => D): (Seq[C], Seq[D]) =
    bifunctor.bimap(tp)(f, g)

  def leftMap[C](f: (E) => C): (Seq[C], Seq[S]) =
    bifunctor.leftMap(tp)(f)

  def rightMap[D](g: (S) => D): (Seq[E], Seq[D]) =
    bifunctor.rightMap(tp)(g)

}

val myValBifunctorInstance = new Bifunctor[MyType] {
  override def bimap[A, B, C, D](fab: (Seq[A], Seq[B]))(f: (A) => C, g: (B) => D): (Seq[C], Seq[D]) =
    (fab._1.map(f), fab._2.map(g))
}

MyVali((Seq.empty[String], Seq.empty[Int]))(myValBifunctorInstance).bimap(a => a, b => b)

이것은 잘 작동하지만 어떤 이유로 나에게 모호한 이유로이 모든 컴파일을 만들기 위해 매개 변수 형식 별칭을 선언해야했습니다. 즉 type MyType[E, S] = (Seq[E], Seq[S]), 이것이 작동하지 않는 이유를 거의 이해하지 못합니다.

def myValBimap[E, S] = new Bifunctor[Tuple2[Seq[E], Seq[S]]] {
  override def bimap[A, B, C, D](fab: (A, B))(f: (A) => C, g: (B) => D): (C, D) = ???
}

[오류] ... (Seq [E], Seq [S])에는 유형 매개 변수가 없습니다. 예상 됨 : 2 개

[오류] def myValBimap [E, S] = new Bifunctor [Tuple2 [Seq [E], Seq [S]]] {

그런 유형 별칭이 정의 될 때 컴파일러가 2 가지 유형의 중단 (중첩 된 람다 유형과 같은)을 생성합니까?

피터 니 엔스
def myValBimap[E, S] = new Bifunctor[Tuple2[Seq[E], Seq[S]]] {  ... }

Tuple2[...]에서 Bifunctor때문에 위의 더 이상 두 가지 유형 매개 변수가없는 E및이 S채워집니다.

예를 들어 myValBimap[Int, String]a를 만들려고 시도 Bifunctor[(Seq[Int], Seq[String])]하고 유형 (Seq[Int], Seq[String])에는 두 가지 유형 매개 변수가 분명히 없습니다.

당신은 쓸 수 있습니다

  • Bifunctor[({ type λ[α, β] = (Seq[α], Seq[β])})#λ] 또는
  • Bifunctor[λ[(α, β) => (Seq[α], Seq[β])]] 종류 프로젝터 플러그인을 사용합니다.

추가 유형이 필요한 경우 유형 매개 변수가있는 암시 적 함수가 필요합니다.

implicit def myBimap[F[_]: Functor]: Bifunctor[λ[(α, β) => (F[α], F[β])]] = ???

더 간단한 예는 Functorfor disjunction / \/이며 왼쪽에 유형 매개 변수를 사용합니다.

implicit def functorDisj[L]: Functor[L \/ ?] = ???
implicit def functorDisj[L]: Functor[({ type λ[α] = L \/ α })#λ] = ???

원래 문제 정보 :에 매핑하고 다음 RE \/ S사용할 수 있습니다 separate.

import scalaz._, Scalaz._

val integers = List.range(1,10)
val stringOrInts: List[String \/ Int] = 
  integers.map(i => if (i % 2 == 0) i.right else i.toString.left)

stringOrInts.separate
// (List[String], List[Int]) = (List(1, 3, 5, 7, 9),List(2, 4, 6, 8))

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

매개 변수화 된 gtest 유형에 대한 다형성

분류에서Dev

Docker 명령에 대한 매개 변수화 된 Bash 별칭을 작성하는 방법

분류에서Dev

다중 유형 매개 변수 클래스 / 함수의 여러 매개 변수에 대한 유형 별칭을 만들 수 있습니까?

분류에서Dev

매개 변수화 된 특성에서 자기 유형에 대한 참조

분류에서Dev

반환 된 매개 변수에 대한 useReducer의 일반 유형

분류에서Dev

이 Rust 유형 별칭에 수명 매개 변수가 필요한 이유는 무엇입니까?

분류에서Dev

매개 변수화 된 유형에 대한 특정 유형 인스턴스인지 확인

분류에서Dev

별칭에서 유형 매개 변수로 트레이 트를 사용하기위한 구문

분류에서Dev

"확장 된 기능에 대한 누락 된 매개 변수 유형"추적

분류에서Dev

TSQL 매개 변수가 구조화 된 유형인지 판별

분류에서Dev

유형 매개 변수에 대한 선택적 매개 변수?

분류에서Dev

TypeScript에서 유형에 대한 별칭 표시 비활성화

분류에서Dev

"세련된"유형에 대한 적절한 유형 생성자 매개 변수 가져 오기

분류에서Dev

Java에서 매개 변수화 된 유형 불일치

분류에서Dev

유형 삭제로 인해 확장 된 기능에 대한 매개 변수 유형이 누락 됨

분류에서Dev

유형 별칭 및 다중 매개 변수 목록 기능을 사용한 유형 추론

분류에서Dev

DIRECTORY 유형에 대한 Oracle의 dbms_metadata.get_ddl : 매개 변수 SCHEMA에 대한 잘못된 입력 값

분류에서Dev

자동에 대한 유형 별칭

분류에서Dev

OCaml의 매개 변수화 된 유형

분류에서Dev

명명 된 매개 변수로 정의 된 함수에 대한 MyPy 유형 힌트이지만 ** kwargs?

분류에서Dev

Rust "이 제한된 유형 매개 변수에 대한 유형을 결정할 수 없습니다 : 제한되지 않은 유형"

분류에서Dev

매개 변수화 된 주석 AspectJ에 대한 표현식

분류에서Dev

C ++ 템플릿 전문화-형식이 아닌 템플릿 매개 변수 '__formal'에 대한 잘못된 형식

분류에서Dev

Rust : 파생 된 특성에 대한 유형 매개 변수를 제한하는 방법

분류에서Dev

람다 함수의 매개 변수 유형이 생략 된 Arrays.sort에 대한 질문

분류에서Dev

단일 변수에 대한 여러 유형 (매개 변수 / 반환 유형)

분류에서Dev

매개 변수화 된 클래스를위한 Java Generic : 무제한 와일드 카드 대 원시 유형

분류에서Dev

수정 될 입력 매개 변수에 대한 유형 힌트

분류에서Dev

Kotlin에서 매개 변수화 된 유형 문제를 수정했습니다.

Related 관련 기사

  1. 1

    매개 변수화 된 gtest 유형에 대한 다형성

  2. 2

    Docker 명령에 대한 매개 변수화 된 Bash 별칭을 작성하는 방법

  3. 3

    다중 유형 매개 변수 클래스 / 함수의 여러 매개 변수에 대한 유형 별칭을 만들 수 있습니까?

  4. 4

    매개 변수화 된 특성에서 자기 유형에 대한 참조

  5. 5

    반환 된 매개 변수에 대한 useReducer의 일반 유형

  6. 6

    이 Rust 유형 별칭에 수명 매개 변수가 필요한 이유는 무엇입니까?

  7. 7

    매개 변수화 된 유형에 대한 특정 유형 인스턴스인지 확인

  8. 8

    별칭에서 유형 매개 변수로 트레이 트를 사용하기위한 구문

  9. 9

    "확장 된 기능에 대한 누락 된 매개 변수 유형"추적

  10. 10

    TSQL 매개 변수가 구조화 된 유형인지 판별

  11. 11

    유형 매개 변수에 대한 선택적 매개 변수?

  12. 12

    TypeScript에서 유형에 대한 별칭 표시 비활성화

  13. 13

    "세련된"유형에 대한 적절한 유형 생성자 매개 변수 가져 오기

  14. 14

    Java에서 매개 변수화 된 유형 불일치

  15. 15

    유형 삭제로 인해 확장 된 기능에 대한 매개 변수 유형이 누락 됨

  16. 16

    유형 별칭 및 다중 매개 변수 목록 기능을 사용한 유형 추론

  17. 17

    DIRECTORY 유형에 대한 Oracle의 dbms_metadata.get_ddl : 매개 변수 SCHEMA에 대한 잘못된 입력 값

  18. 18

    자동에 대한 유형 별칭

  19. 19

    OCaml의 매개 변수화 된 유형

  20. 20

    명명 된 매개 변수로 정의 된 함수에 대한 MyPy 유형 힌트이지만 ** kwargs?

  21. 21

    Rust "이 제한된 유형 매개 변수에 대한 유형을 결정할 수 없습니다 : 제한되지 않은 유형"

  22. 22

    매개 변수화 된 주석 AspectJ에 대한 표현식

  23. 23

    C ++ 템플릿 전문화-형식이 아닌 템플릿 매개 변수 '__formal'에 대한 잘못된 형식

  24. 24

    Rust : 파생 된 특성에 대한 유형 매개 변수를 제한하는 방법

  25. 25

    람다 함수의 매개 변수 유형이 생략 된 Arrays.sort에 대한 질문

  26. 26

    단일 변수에 대한 여러 유형 (매개 변수 / 반환 유형)

  27. 27

    매개 변수화 된 클래스를위한 Java Generic : 무제한 와일드 카드 대 원시 유형

  28. 28

    수정 될 입력 매개 변수에 대한 유형 힌트

  29. 29

    Kotlin에서 매개 변수화 된 유형 문제를 수정했습니다.

뜨겁다태그

보관