갈루아의 반서재


head 함수의 타입이 무엇이라고 생각하는가? head 함수는 리스트를 받아 첫 번째 요소를 반환한다. 지금 확인해보자. 

  1. Prelude> :head
  2. head :: [a] -> a

여기서 a는 무엇인가? 타입을 뜻하는 것인가? 앞서 타입은 대문자로 쓴다고 말한바 있다. 그러므로 a는 타입이 아니다. 타입이 아니라 타입변수(type variable)이다.

a는 어떤 타입이라도 될 수 있다는 의미이다. 다른 언어의 제너릭같은 개념이다. 타입 변수를 가지고 있는 함수는 다형함수(polymorphic functions) 라고 부른다. head 의 타입 선언은 어떤 타입의 리스트를 받아서 그 타입의 한 원소를 반환한다는 말이다. 

fst 함수를 기억하는가? 페어의 첫 번째 요소를 반환하는 함수이다. 타입을 확인해보자. 

  1. Prelude> :fst
  2. fst :: (a, b) -> a

a 와 b 는 서로 다른 타입 변수임에 주의해야 한다. 하지만, 반드시 서로 다른 타입이어야할 필요는 없다.