문제

나는 형식 시스템을 지원을 합니다.I 략적인 아이디어를 가지고있는 방법의 유형을 추정은 일반적으로 구현되는 시나리오,하지만 내가 궁금하는 방법-후 형식추가 완료-의 올바른 구현 과부는 연산자 선택할 수 있습니다.또는,다시 말해서,어떻게 추정형 전달할 수 있는 다시 아래로는 구문에 나무를 연산자입니다.

을 위한 작은 예로,표현 (x + y) + 1x :: N | S, y :: a, + :: (N -> N -> N) | (S -> S -> S), 1 :: N. ::의 유형, 고 a | b 스탠드형 a 유형 b.

그런데,나는 가정,형식추는 것이 지금 작업을 통과하는 구리,그리고 각 노드가 반환하는 입력 제약 조건:

(x + y) + 1 => ((N & (N[a=N] | S[a=S])), (N & N) -> N) | ((S & (N[a=N] | S[a=S])), (S & N) -> S) => N[a=N]
  1         => N
  +         => (N -> N -> N) | (S -> S -> S)
  x + y     => ((N & (N | S)), (N & a) -> N) | ((S & (N | S)), (S & a) -> S) => N[a=N] | S[a=S]
    x       => N | S
    y       => a
    +       => (N -> N -> N) | (S -> S -> S)

a & b 이 예제에서는 스탠드 통합 유형 ab, [a=T, b=U] 의 평등에 대한 제약 조건을 입력 변수입니다.

예상대로 반환한 유형의 주어진 식이로 유추 N[a=N], 는 N 는 형 변수 a 이 될 것으로 예상 N.

따라서,두 개의에서 제공한 구현에 대해 + 운전자(N -> N -> N, S -> S -> S), N -> N -> N 을 사용해야 합니다.주어진 예제에서,그 결과 유형을 유추하지만,형식의 오버로드 연산자입니다.나의 질문이 있을 경우 일반적인 패턴을 알리는 데 사용됩 + 노드 구문에 나무의 구현합니다.

도움이 되었습니까?

해결책

수 구성하는 형식추는 다음과 같습니다.

가정의 입문이 있 유형 Input.정의 구문을 출력 Output 수처 Input 하지만 명시적으로 주석 유형에 모든 변수입니다.형식추가 유형

infer : Input -> List (Output * Type)

즉 주어진 어떤 입력 e,그것의 목록을 반환합니다.각각의 대답은 쌍 (e', t)e'e 변수가 주석에 의한 형식 t 는 유추한 종류의 e.

당신이 볼 수 있습니다 이것으로 모든 맡에 nondeterminism 냅니다.필요할 때마다 추론하는 변수의 형식 x, 에,당신은 그것의 가능한 유형 S | T | ... 고지점에서는 각각 그 중 하나입니다.이 방법은 당신이하지 않아도를 통과"뒤로"어떤 정보를 sub-식입니다.대신에,각 하위 식는 이미 주석에,가능한 모든 방법이다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 cs.stackexchange
scroll top