2017-10-20 19 views
1

이러한 반환 유형은 무엇이 다른가요 ??카레 함수 유형의 괄호 사이의 차이점

val fn1 : int −> (int −> (int −> int)) 
val fn2: (int −> int) −> (int −> int) 

이것은

int -> int -> int meaning int -> (int -> int) 

즉 적합한 타입의 함수를 생성? 그들은 괄호없이 같은 의미가 있습니다!

답변

3

fn1의 함수 유형은 여러분이 말한 것처럼 int -> int -> int -> int과 같습니다. 당신이 fn1 a b c 같은 여러 curried 인수를 할 때

fn1 a 유형 int -> int -> int의 함수이며, fn1 a b 유형 int -> int의 함수이다. 따라서 fn1int을 반환하는 함수를 반환하는 함수를 반환하는 함수로 볼 수도 있습니다. int -> (int -> (int -> int))과 같은 괄호를 추가하면 해당 해석이 강조 표시됩니다.

이 함수는 fn2이 다릅니다.이 함수는 인수로 int -> int 유형의 함수를 취해 int -> int 유형의 다른 함수를 반환합니다.

+1

'fn2'의 타입은'(int -> int) -> int -> int'로 쓰여질 수도 있지만 첫 번째 괄호는 제거 할 수 없습니다 – newacct