ocaml
프로젝트에서 작업하는 동안 실제로 이해할 수없는 것을 발견했습니다.ocaml의 모듈 식 프로그래밍
OCaml 표준 라이브러리의 과 List
모듈을 모두 사용한다고 가정합니다. 둘 다 함수 length
을 구현하지만 유형은 다릅니다. List
모듈에서 , 이것은 그 유형 :
length: a' list -> int
그리고 Array
모듈, 그것은 유형이 있습니다
length: a' array -> int
을하지만 난 당신이 내가했다 동일한 모듈에 두 모듈을 사용하여 원 open
키워드를 통해 구현 :
open List
open Array
난에 length
기능을 사용하려고 할 때 목록에서 컴파일하는 동안 유형 오류가 발생했습니다.
OCaml은 강력한 정적 형식 언어이기 때문에 컴파일러가 왜 내가 둘 다 사용한다고 선언했기 때문에 목록 모듈의 길이 함수가 필요하다는 것을 알지 못했습니다.
"컴파일러가 왜 내가리스트 모듈의 길이 함수를 원한다는 것을 몰랐는지 궁금합니다. 왜냐하면 내가 '예, 그렇지만'fun s -> length s'의 타입이 될 것이라고 선언했기 때문입니다. 이 맥락? –
jrouquie의 답을 바탕으로, 그것은'a 'array -> int' 일 것입니다. –
정확하게 추측하려고 시도한 가설적인 OCaml 컴파일러의 경우, OCaml 타입 시스템에는 가장 일반적인 타입이 하나도 없을 것입니다 함수에 대한. 이 괴롭힘에 대한 하스켈의 해결책에 관심이있을 수 있습니다. 클래스를 입력하세요 : http://www.haskell.org/tutorial/classes.html –