왜 가치 제한이 합병 함수로 일어나는가?
-
12-12-2019 - |
해결책
mergeSort
의 1 요소 목록의 특수한 경우를 처리하지 않습니다.
일반적인 경우는 올바른 유형을 추론하기 위해 "너무 일반"입니다.결과적으로 컴파일러는 함수 ( '목록 -> b 목록)에 대한 너무 제네릭 유형이고 결과는 항상 일반 목록 (값 제한으로 인해 허용되지 않음)입니다.
이렇게 해결하면 유형이 'A 목록 ->'목록으로 올바르게 추론됩니다.
let rec mergeSort = function
| [] -> []
| [x] -> [x]
| xs -> let xs1, xs2 = split xs
merge (mergeSort xs1) (mergeSort xs2)
. 제휴하지 않습니다 StackOverflow