2015-02-06 2 views
1

나는 다음과 같은 코드가 있습니다기능 성분 인수에 오류가

let add n x = x + n 
let times n x = x * n 
let addTimes = add 5 >> times 5 
addTimes 4 

을하고이 아무 문제없이 작동합니다. 나는이

let add n x = x + n 
let times n x = x * n 
let addTimes = add >> times 
addTimes 4 

처럼 변경할 때하지만 난 컴파일 오류

error FS0071: Type constraint mismatch when applying the default type '(int -> int)' for a type inference variable. Expecting a type supporting the operator '*' but given a function type. You may be missing an argument to a function. Consider adding further type constraints 

있어?

+1

함수 구성은 기본적으로 f (g (x))이지만 g (x)는 단일 값을 반환하는 반면 f는 2 개의 인수를 취합니다 - 어떻게 구성이 작동 할 것으로 예상됩니까? –

+0

제 문제는 컴포지션이 어떻게 작동하는지 모르겠다는 것입니다. 너무 유선이에요. –

답변

2

(>>)의 서명은 ('T1 -> 'T2) -> ('T2 -> 'T3) -> 'T1 -> 'T3입니다. 즉, 두 개의 단항 기능을 구성 - 두 개의 바이너리 (분명 도움이되지하지만 틀림없이, 또는 적어도) 일반적으로 유효 기능,하지만 공급하려는 에 대한 기능 유형 :

(f >> g) xg(f(x))과 같다고 가정하면 f이 바이너리 일 때 예상되는 결과는 무엇입니까? 사용자의 경우, x (int)는 add (int -> int -> int)에 부분적으로 도포하고, 그 부분적인 애플리케이션 ((int -> int))는 분명히 함수 타입 (int -> int)보다는 최초 매개 변수로 int 기대 times (도 int -> int -> int)에 전달된다.