ML 계보의 표현 기반 언어를 연구하고 있으므로 자연스럽게 형식 유추가 필요합니다.
이제 EOPL (Friedman and Wand)의 간단한 구현을 기반으로 유형을 유추하는 문제로 제약 조건 기반 솔루션을 확장하려고하지만 대수 데이터 유형을 우아하게 회피합니다.
지금까지 내가 한 것은 매끄럽게 작동합니다. 식이 경우 e
이고 a + b
, e : Int
, a : Int
및 b : Int
. 경우 e
일치하는 것입니다,
match n with
| 0 -> 1
| n' -> n' * fac(n - 1)`,
나는 바로 그를 추론 할 수있다 t(e) = t(the whole match expression)
, t(n) = t(0) = t(n')
, t(match) = t(1) = t(n' * fac(n - 1)
등등 ...
그러나 대수 데이터 유형에 관해서는 확실하지 않습니다. 필터와 같은 기능을 가정하십시오.
let filter pred list =
match list with
| Empty -> Empty
| Cons(e, ls') when pred e -> Cons (e, filter ls')
| Cons(_, ls') -> filter
리스트 타입이 다형성을 유지하기 위해서는 Cons 타입이되어야합니다 a * a list -> a list
. 따라서 이러한 제약 조건을 설정할 때 분명히 이러한 유형의 대수 생성자를 찾아야합니다. 이제 문제는 대수 생성자의 여러 용도에 대한 '문맥 감도'입니다 a
. 각 사례는 동일해야합니까?
나는 이것에 대한 일반적인 해결책을 찾는 데 어려움을 겪고 있으며 이것에 관한 많은 문헌을 찾을 수 없습니다. 제약 조건 기반 형식 유추를 가진 표현 기반 언어와 비슷한 것을 찾을 때마다 대수 데이터 형식과 다형성이 부족합니다.
모든 의견을 보내 주셔서 감사합니다!