record syntax in {haskell}

ref: https://learnyouahaskell.com/making-our-own-types-and-typeclasses/#record-syntax

하스켈의 record는 C의 struct와 같은 의미이다. 기본 타입을 가지고 사용자 정의 타입을 만들 수 있는데, data 타입을 정의할때 튜플(❓)로 정의할 경우 속성의 순서와 의미를 별도로 알고 있어야 한다는 단점이 있다. 따라서 각 속성에 이름을 정의하는 문법인 record를 사용하면 편하다.

data Person = Person { firstName :: String
                   , lastName :: String
                   , age :: Int
                   , height :: Float
                   , phoneNumber :: String
                   , flavor :: String
                   } deriving (Show)

C의 struct와는 다르게, record에 정의된 각 속성은 함수다. 단지 record 타입을 인자로 받아 :: 오른쪽에 있는 타입의 값을 리턴하는 함수일 뿐이다.

ghci> :t firstName
firstName :: Person -> String
ghci> :t lastName
lastName :: Person -> String