김찬민
가입: 2010년 9월 6일 올린 글: 81
|
올려짐: 2014년11월30일 23:18 주제: 숙제 7: binary operator =과 write 관련 질문입니다. |
|
|
문서에는 binary operator =와 write로 가능한 타입이 or로 묶여 있습니다.
(i, b, s, or l) / (i, b, s)
그러면 다음과 같은 프로그램은 타입 체커에서 타입 오류로 거부되어야 합니까? 아니면 런타임 에러로 처리가 되어도 충분합니까?
코드: | (fn x => ((x.1) = (x.2))) ((fn x => x), (fn x => x)) |
코드: | let val f = (fn x => ((x.1) = (x.2))) in f ((fn x => x), (fn x => x)) end |
이 예제를 타입 오류로 거르면서도 i, b, s, l 모두에 대해 통과시키기 위해서는 타입 방정식들을 or로 표현해야 하는데, 배운 것은 and로 표현하는 것 뿐인 것 같습니다.
이런 식으로 타입이 안 맞을 경우도 통과를 시키자니 soundness가 깨지는 것 같고, 통과 시키지 않자니 방법이 쉽지 않습니다.
write도 마찬가지입니다.
하면 되긴 한데, 저 조건들도 고려해서 작성해야 할까요? |
|