Skip to content

Instantly share code, notes, and snippets.

@nattybear
Last active August 11, 2021 12:41
Show Gist options
  • Save nattybear/0cef0bd7636dbc30c7d5173833dab031 to your computer and use it in GitHub Desktop.
Save nattybear/0cef0bd7636dbc30c7d5173833dab031 to your computer and use it in GitHub Desktop.
하스켈 타입 만들기

타입 만들기

하스켈에서 타입을 만들 때는 키워드 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라고 해도 괜찮습니다.

대문 링크

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment