저는 하스켈 프로가 아닙니다. 오늘 저는 타입 시스템에 대해 다소 기괴한 경험을했습니다. 이 두 번째 줄은 형식 오류를 발생시킵니다.목록의 목록으로 유형을 확인하십시오
그것은 다음과 같은 오류와 함께 실패maxdiag ((a:as):(b:bs):(c:cs):(d:ds):xs) len =
maximum [a*(bs !! 0)*(cs !! 1)*(ds !! 2), maxdiag (as:bs:cs:ds) (len-1)]
이 : 나는 maxdiag (as:bs:cs:ds:xs)
에 두 번째 줄의 잘못된 부분을 변경하는 경우
Occurs check: cannot construct the infinite type: a0 = [a0]
Expected type: [[a0]]
Actual type: [a0]
In the second argument of `(:)', namely `ds'
In the second argument of `(:)', namely `cs : ds'
그것이
을 읽을 수 있도록 문제는 두 번째 줄의maxdiag (as:bs:cs:ds)
비트가
maxdiag ((a:as):(b:bs):(c:cs):(d:ds):xs) len =
maximum [a*(bs !! 0)*(cs !! 1)*(ds !! 2), maxdiag (as:bs:cs:ds:xs) (len-1)]
... 오류가 없습니다. 마찬가지로, maxdiag (as:bs:cs:(ds:xs))
으로 바꾸면 성공합니다. 제 질문은
- 이 오류는 무엇을 의미합니까?
- 왜 발생 했습니까?
- 왜이 두 가지 외형 적으로 다른 점이 수정 되었습니까?
+1 마지막 문단에 대해 – amindfv
나는 그 패턴에 관한 것이 아닌 실제 질문을 복잡하게 만들고 싶지 않았기 때문에이 함수에 대한 다른 문맥을 특별히 포함하지 않았습니다.하지만 그것은 아닙니다. 견고한 프로그램이나 어떤 것의 일부로, 나는 타입 시스템으로 오류를 잡기 만하고있다. 나는 실제로 이와 같은 코드를 작성하지 않을 것입니다. :피 – apc