이것은 아마도 매우 기본적인 질문 일 뿐이지 만 그럼에도 불구하고 SO에서 다루지 않은 것 같습니다.하스켈 - (타입 선언) "a"란 무엇입니까?
는 최근 하스켈을했고 지금까지 선언 구성 입력 주로 다음
Int
Bool
Float
etc, etc
가 지금은 목록에 무엇입니까 내가 그런 다음 함수와 같이 a
를 사용하는 유형 선언을보고 있어요 그 연관 목록을 반복 :
contains :: Int -> [(Int,a)] -> [a]
contains x list = [values | (key,values)<-list, x==key]
사람이 a
가 무엇인지에 관한 설명을 제공하고, 어떻게 작동 할 수 있습니까? 관측에서 그것은 모든 유형을 나타내는 것으로 보인다. 이것은 어떤 유형의 목록이라도 매개 변수로 입력 할 수 있다는 것을 의미합니까?
마찬가지로 '중요'도 특별하지 않습니다. * 소문자 식별자는 그 의미를 나타냅니다. 이것은 유형 * 변수 *이며, 동일한 서명에 여러 다른 유형 변수가있을 수 있습니다. 예를 들어,'const :: a -> b -> a'는 두 개의 인자를 가지며, 각각의 타입은 첫 번째 입력과 같은 타입의 값을 반환합니다. – amalloy
나는 그것의 아주 일반적인 모양을 본다. 그래서 대부분의 경우'a'는 일반적으로 내 함수가 실제로 사용하거나 변경하지 않는 요소를 나타냅니다. – Bolboa
@ 볼보아 : 예, 다른 언어의 "generics"개념과 밀접한 관련이 있습니다. 그리고 네, 타입이 완전히 범용 인 경우 직접 값 자체에 대해 할 수있는 일은 거의 없습니다. 하스켈은 유형에 대한 더 많은 정보를 제공하는 방법을 가지고있다 (예를 들어, "평등을 비교할 수있다", "인쇄 할 수있다", "숫자처럼 취급 할 수있다"), 값에 대해 더 많은 처리를 할 수있다. ; 이것에 관심이 있다면 문서 나 튜토리얼에서 "클래스"를 찾아보십시오. – psmears