형식 서명 a-> b-> a와 c-> a-> c 사이에 차이가 있습니까?


16

이 질문은 모든 유형의 인수를 취할 수있는 Haskell 함수에 대한 이론적 질문입니다. 타입 시그니처와 함수의 차이점이 있습니까?

a -> b -> a 

c -> a -> c 

인스턴스화 되었습니까? 도움을 주시면 감사하겠습니다.


6
아니요, 단순히 유형 변수 의 이름을 변경했습니다 . 변수의 이름을 다른 변수로 바꾸지 않는 한 (이름이 충돌하는 경우) 아무런 문제가 없습니다.
Willem Van Onsem

유형 변수가 다른 곳에 바인딩되어 있는지 여부에 따라 다릅니다.
Bergi

답변:


17

다른 점이 없다. 때문에 a, b그리고 c시작 소문자 , 다음은 변수 . 변수 이름을 바꿀 수 있으며 두 개 이상의 변수가 " 충돌 " 하지 않는 한 동일하게 유지 됩니다.

변수가 다른 변수와 동일한 이름을 갖도록 변수 이름을 바꾸거나 두 개 이상의 변수 이름을 같은 새 이름으로 바꾸면 이러한 충돌이 발생할 수 있습니다. a예를 들어 b첫 번째 코드 조각에서 변수의 이름을 바꾸면 b -> b -> b첫 번째와 두 번째 매개 변수의 유형이 동일하기 때문에 동일하지 않습니다. 타입 시그니처에서는 동일 할 수 있지만 필요 하지 않은 두 가지 타입을 자유롭게 선택할 수 있습니다 .


16

아니. 생각 a -> b -> a으로 This Type -> Another Type -> This Type. 그런 다음 둘 다 주어진 패턴에 맞습니다. 그러나 a -> b -> c맞지 않는 것과 같은 것 : This Type -> That Type -> Yet Another Type(일반적으로) 다르다; 의 경우를 제외하고 c = a관심있는 패턴을 생성합니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.