도움이 되었습니까?

해결책

mergeSort의 1 요소 목록의 특수한 경우를 처리하지 않습니다. 일반적인 경우는 올바른 유형을 추론하기 위해 "너무 일반"입니다.결과적으로 컴파일러는 함수 ( '목록 -> b 목록)에 대한 너무 제네릭 유형이고 결과는 항상 일반 목록 (값 제한으로 인해 허용되지 않음)입니다.

이렇게 해결하면 유형이 'A 목록 ->'목록으로 올바르게 추론됩니다.

let rec mergeSort = function
    | [] -> []
    | [x] -> [x]
    | xs -> let xs1, xs2 = split xs
            merge (mergeSort xs1) (mergeSort xs2)
.

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