이 경우의 :추론 ... 다음 ... 다른 이상한 행동 다음과 같은 나쁜 코드를 고려
내가 눈치fun x =
if (null x) then 0
else (take 50 x) : (fun (drop 50 x))
, 나는 아무 문제없이 ghci에로드 할 수 있고, 그게 문제입니다.
이 기능을 평가하려고하면 프로그램에서 오류 만 검색합니다.
if ... then ... else 표현식의 기본 유추 규칙에 대해서는 두 개의 분기가 명시 적으로 다른 유형을 검색하므로 왜이 코드를로드 할 수 있습니까? 컴파일러가 왜이 코드가 잘못 작성되었다는 것을 알 수 없습니까?
참고 : 물론이 함수에 대해 올바른 형식 주석을 추가하면 예상대로 거부되지만 이해할 경우 형식 주석 없이도 거부해야합니다.
Don의 답을 덧붙이면 : 이론적으로'[[a]]'에 대해'Num' 인스턴스를 정의 할 수 있습니다.이 경우 코드는 타입 체크를하고 Num Numeric 인스턴스를 사용하여 숫자 리터럴' 0 '이다. –