복붙노트

[SCALA] 스칼라에서 더 높은 kinded 유형은 무엇입니까?

SCALA

스칼라에서 더 높은 kinded 유형은 무엇입니까?

당신은 웹에서 다음을 찾을 수 있습니다 :

그래서 염두에두고, 따라서 질문 위의 유형 생성자, 높은 kinded 종류와 유형 매개 변수로 타입 생성자를 취 타입 생성자를 구별하기가 어렵습니다.

해결법

  1. ==============================

    1.내가 어떤 동음으로 선발하여이 혼란의 일부를 시작하기 위해 만들어 보자. 나는 사람들이 더 잘 알고 있어야하는 경향이를 설명하는 값 수준으로 비유를 사용하려면.

    내가 어떤 동음으로 선발하여이 혼란의 일부를 시작하기 위해 만들어 보자. 나는 사람들이 더 잘 알고 있어야하는 경향이를 설명하는 값 수준으로 비유를 사용하려면.

    값 생성자는 일반적으로 "기능"또는 "방법"이라고합니다. 또는 "추상"(그들은 "모양을"변화의 "물건"을 구축하는 데 사용할 수 있기 때문에)이 "생성자는"또한 "다형성"이라고되어있다 (다른 다형성 인스턴스 생성 사이에서 변화 어떤 위로 추상 그들은부터).

    한 번 유형의 이상이 추상,하지만 그 유형 자체는 아무 이상 추상적 할 수 없습니다 : 추상화 / 다형성의 맥락에서, 첫 번째 순서는 추상화의 "단일 사용"을 의미합니다. 자바 5 제네릭은 첫 번째 순서입니다.

    추상화의 위의 특성 분석의 1 차 해석은 다음과 같습니다 :

    같은 값 1 또는 String 형으로 반군 추상화가 (난 당신이 "영차"수 있겠죠,하지만이 어디서나 사용할 보지 못했다), 없다 강조하기 위해, 우리는 일반적으로 무언가 또는 "적절한"값을 말한다 유형.

    적절한 값은 (이 그들을 추상적하지 않습니다) 인수를 기다리는하지 않는 의미에서 "즉시 사용 가능한"입니다. 당신은 쉽게 / 인쇄 검사 할 수 있습니다 가치로 생각 (함수가 바람을 피우고 직렬화!).

    적당한 타입 (그들은 먼저 적절한 유형을 수득 적합한 형태 인수에 적용해야), 타입 생성자 어떤 값을 분류하지 않는다 (스트 값 포함) 값을 분류 한 유형이다. 유형을 인스턴스화하기 위해, 그것은 적절한 유형이 될 필요 (하지만 충분하지)입니다. (그것은 추상 클래스, 또는 당신이 액세스 할 수없는 클래스 수 있습니다.)

    "높은 순서"는 다형성 / 추상화의 반복 사용을 의미하는 일반 용어는 간단하다. 그것은 다형성 유형과 값 같은 일을 의미한다. 구체적으로는, 뭔가 이상 추상화 뭔가 이상 높은 순서 추상화 초록. 유형의 경우,이 용어는 "높은 kinded"더 일반적인 "높은 순서"의 특수 목적 버전입니다.

    따라서, 우리의 특성의 고차 버전이된다 :

    따라서, "고차원은"단순히 "X를 통해 추상화"말할 때, 당신이 정말로 그런 뜻이 있음을 의미합니다! 자신의 "추상화 권한"을 잃지 않는다 통해 추출 된 X :이 모든 것이 추상적 인 원 수 있습니다. 이 인수로 추상화의 사용자가 제공 / 변경 될 수 있도록, 값 또는 유형의 정의에 필수적인 것은 아니다 뭔가를 떠나 : (그건 그렇고, 내가 의미하는 동사 여기 "추상적"를 사용 .)

    여기에 적절한, 일차 및 고차원 적 가치와 유형 (이메일로 루츠의 질문에 의해 영감을) 몇 가지 예입니다 :

                       proper    first-order           higher-order
    
    values             10        (x: Int) => x         (f: (Int => Int)) => f(10)
    types (classes)    String    List                  Functor
    types              String    ({type λ[x] = x})#λ   ({type λ[F[x]] = F[String]})#λ
    

    사용 된 클래스는 다음과 같이 정의 된 경우 :

    class String
    class List[T]
    class Functor[F[_]]
    

    클래스를 정의를 통해 우회를 방지하려면 어떻게 든 스칼라에서 직접 표현할 수없는 익명 형식 기능을 표현해야하지만 너무 많은 구문 오버 헤드없이 구조 유형을 사용할 수 있습니다합니다 (#의 λ-스타일은 HTTPS로 인해입니다 : // 유래 .COM / 사용자 / 160378 / retronym AFAIK) :

    익명 형식 기능을 지원 스칼라의 일부 가상의 미래 버전에서는의 예에서 마지막 라인을 단축 할 수있다 :

    types (informally) String    [x] => x              [F[x]] => F[String]) // I repeat, this is not valid Scala, and might never be
    

    (개인적으로, 나는 지금까지, 그들은 당신이 절대적으로 명확하게 할 필요가있을 때, 나는 "타입 생성자 매개 변수", "형 생성자 멤버"같은 것들을 말하는 제안! 결국 단지 유형있어 "높은 kinded 유형"에 대해 이야기 후회 또는 "형식 생성자의 별명은"당신은 단지 적절한 유형에 대해 이야기하지 않을 것을 강조합니다.)

    PS : 다형성 형태가 때때로 적절한 유형은 다형성 값을 분류하기 때문에, 인 FORALL T, T => T와 같은 보편적 정량화 타입 (의미 때문에 문제를 더욱 복잡하게는, "다형성"은, 다른 방법으로 모호 ) 스칼라에,이 값은 타입 구조 {(: T (X))을 T = X의 방어력을 적용 [T]}과 같이 쓸 수있다

  2. ==============================

    2.(이 답변은 일부 그래픽 및 기록 정보에 의해 아드리안 무어 대답을 장식하는 시도이다.)

    (이 답변은 일부 그래픽 및 기록 정보에 의해 아드리안 무어 대답을 장식하는 시도이다.)

    높은 kinded 유형 2.5 이후 스칼라의 일부입니다.

  3. ==============================

    3.인스턴스 값이다 지능 및 숯, 같은 일반적인 형태의 종류 *이다. ;> * - 어쩌면 같은 단항 타입 생성자의 종류는 *이다 어느와 같은 바이너리 형식 생성자의 종류 (카레) 한 * -> * -> *, 등등. 그들은 하나 개 이상의 유형을, 그리고 형식을 반환 : 당신은 타입 수준의 함수로 아마와 하나 같은 유형을 볼 수 있습니다.

    인스턴스 값이다 지능 및 숯, 같은 일반적인 형태의 종류 *이다. ;> * - 어쩌면 같은 단항 타입 생성자의 종류는 *이다 어느와 같은 바이너리 형식 생성자의 종류 (카레) 한 * -> * -> *, 등등. 그들은 하나 개 이상의 유형을, 그리고 형식을 반환 : 당신은 타입 수준의 함수로 아마와 하나 같은 유형을 볼 수 있습니다.

    이 순서는 함수 화살표의 좌측에, (비공식적) 스팅 깊이 1보다 큰 차수 경우 함수는 고차이다 :

    그래서, 긴 이야기는 짧게, 더 높은 kinded 유형은 단지 형 수준의 고차 기능입니다.

  4. ==============================

    4.나는 말할 것입니다 : 타입 생성자를 통해 높은 kinded 형 초록. 예를 들면 치다

    나는 말할 것입니다 : 타입 생성자를 통해 높은 kinded 형 초록. 예를 들면 치다

    trait Functor [F[_]] {
       def map[A,B] (fn: A=>B)(fa: F[A]): F[B]
    }
    

    여기서 펑 터는 (논문은 "고등 종류의 총칭"에서 사용되는)는 "높은 kinded 유형"이다. 콘크리트 ( "일차") (적절한 유형 만 이상 추상화) 목록과 같은 생성자를 입력하지 않습니다. 그것은 모든 단항 ( "일차") 타입 생성자 이상의 추상화 (F로 표시된 바와 _).

    자바에서 우리는 분명히 타입 생성자 (예 : 목록 ),하지만 우리는 (그들에 추상적하지 예를 들어 우리가 쓸 수 없습니다 수 있기 때문에 우리는 더 "높은 kinded 유형"이 없다 : 또는 다른 방법으로 그것을 넣어 ) 적어도 직접적으로 - 펑 인터페이스는 위의 정의.

    용어 "고차 (타입 생성자) 다형성"은 "높은 kinded 유형"을 지원하는 시스템을 설명하는 데 사용된다.

  5. from https://stackoverflow.com/questions/6246719/what-is-a-higher-kinded-type-in-scala by cc-by-sa and MIT license