문제
SML 기능을 호출 할 때 우선 순위 문제인 것으로 보입니다. 대체 :
fun substitute v new (typevar q) = ...
그리고 나는 이것을 다른 기능에서 호출하고 있습니다.
fun new_type_vars (typevar v) non_gens =
substitute v new_var() (typevar v)
하지만 오류가 발생합니다.
C:/sml/type_checker.sml:22.48-23.44 Error: operator and operand don't agree [tycon mismatch] operator domain: type_exp operand: unit -> string in expression: (substitute v) new_var
그것은 그것이 전화를 걸고 (대체 V)를 시도한 다음 해당 호출의 결과를 argument new_var와 함께 호출한다고 제안하는 것 같습니다.
나는 모든 주위에 괄호를 추가하려고 시도했지만 도움이되지 않으며 논쟁에 괄호를 추가 할 때 (v new_var...)
V는 New_var의 함수 응용 프로그램이라고 생각합니다. 이 기능 호출로 무슨 일이 일어나고 있습니까?
해결책
당신은 아마 변화하고 싶을 것입니다
substitute v new_var() (typevar v)
에게
substitute v (new_var()) (typevar v)
(Boutta의 답변은 이유를 설명합니다.)
다른 팁
모든 유형의 다른 작업과 변수를 제공하지 않기 때문에 모든 것을 이해하지 못합니다.
그러나 당신이 가진 일반적인 문제는 이미 추측 한대로 SML은 왼쪽에서 함수 호출 (변수 바인딩)을 실행합니다. 여기서 예 :
fun f a:int b:int c:string = ...
따라서 F는 int-> int-> string-> ... 유형의 함수이며 괄호를 암시 적으로 추가합니다 (((fa : int) b : int) c : int) = ...
이것은 예를 들어 다음과 같이 사용할 수 있음을 의미합니다.
var f2 = f 3;
그리고 f2는 이제 int-> string-> ... 유형을 가지고 있습니다.
제휴하지 않습니다 StackOverflow