하스켈에서 타입을 만들 때는 키워드 data
를 사용합니다.
아래처럼 선언하면 MyType
이라는 타입에는 값 MyValue
가 있다는 뜻입니다.
data MyType = MyValue
이렇게 만든 타입을 아래처럼 확인할 수 있습니다.
ghci> x = MyValue
ghci> :t x
MyValue :: MyType
동전의 앞면과 뒷면처럼 하나의 타입에 여러 가지 경우의 값이 있을 경우에는 아래처럼 |
를 이용해서 값을 나열합니다.
data Coin = Head | Tail
아래처럼 사용할 수 있습니다.
ghci> x = Head
ghci> :t x
x :: Head
ghci> y = Tail
ghci> :t y
y :: Tail
값은 필요한만큼 |
를 적고 추가하면 됩니다. 만약 가위바위보처럼 값이 3개인 타입이 필요하다면 아래처럼 하면 됩니다.
data RockPaperScissors = Rock | Paper | Scissors
|
를 이용한 가장 친숙한 타입은 Bool
입니다.
data Bool = False | True
값을 만들 때 값 이름 뒤에 필요한 타입을 이어 적을 수 있습니다.
예를 들어 TypePerson
이라는 타입을 만들 때 사람의 이름과 나이를 표현하고 싶다면 아래처럼 하면 됩니다. 사람 이름은 타입 String
으로 표현하기로 하고 나이는 타입 Int
로 표현하기로 합니다.
data TypePerson = ValuePerson String Int
아래처럼 사용할 수 있습니다.
ghci> tom = ValuePerson "Tom" 35
ghci> :t tom
ValuePerson "Tom" 35 :: TypePerson
어려운 말은 쓰고 싶지 않지만 다른 사람들과 대화를 하려면 용어를 알아야 합니다.
- 여러 가지 경우의 값을 표현하는 타입을 Sum 타입 이라고 합니다.
- 하나의 값에 여러 정보를 담고 싶을 때 쓰는 타입은 Product 타입 이라고 합니다.
data
다음에 쓰는 타입의 이름은 타입 생성자 Constructor 라고 합니다.MyType
Coin
RockPaperScissors
Bool
=
오른쪽에 처음 적거나|
다음에 처음 적는 값 이름은 값 생성자 라고 합니다.MyValue
Head
Tail
Rock
Paper
Scissors
False
True
- 타입과 값의 이름은 대문자로 시작해야 합니다.
- 타입 이름과 값 이름은 꼭 다를 필요가 없습니다. 같아도 됩니다. 그래서
data Person = Person String Int
라고 해도 괜찮습니다.