수색…


간단한 데이터 형식 만들기

하스켈에서 사용자 정의 데이터 유형을 생성하는 가장 쉬운 방법은 data 키워드를 사용하는 것입니다.

data Foo = Bar | Biz

형식의 이름은 data= 사이에 지정되며 형식 생성자 라고합니다. After = 우리는 데이터 유형의 모든 값 생성자| 기호. 하스켈에는 모든 유형 및 값 생성자가 대문자로 시작해야한다는 규칙이 있습니다. 위의 선언은 다음과 같이 읽을 수 있습니다 :

Foo 라는 유형을 정의하십시오. 여기에는 BarBiz 두 가지 값이 있습니다.

맞춤형 변수 생성하기

let x = Bar

위의 명령.은 Foo 유형의 x 라는 변수를 작성합니다. 유형을 확인하여이를 확인해 봅시다.

:t x

인쇄물

x :: Foo

값 생성자 매개 변수를 사용하여 데이터 유형 만들기

값 생성자는 데이터 형식의 값을 반환하는 함수입니다. 이 때문에 다른 함수와 마찬가지로 하나 이상의 매개 변수를 사용할 수 있습니다.

data Foo = Bar String Int | Biz String

Bar 값 생성자의 유형을 확인해 봅시다.

:t Bar

인쇄물

Bar :: String -> Int -> Foo

Bar 가 실제로 함수라는 것을 증명합니다.

맞춤형 변수 생성하기

let x = Bar "Hello" 10
let y = Biz "Goodbye"

형식 매개 변수를 사용하여 데이터 형식 만들기

타입 생성자는 하나 이상의 타입 파라미터를 가질 수 있습니다 :

data Foo a b = Bar a b | Biz a b

Haskell의 타입 파라미터는 소문자로 시작해야합니다. 사용자 정의 데이터 유형은 아직 실제 유형이 아닙니다. 유형의 값을 생성하려면 모든 유형 매개 변수를 실제 유형으로 대체해야합니다. ab 는 어떤 타입이든 될 수 있기 때문에 값 생성자는 다형 함수입니다.

맞춤형 변수 생성하기

let x = Bar "Hello" 10      -- x :: Foo [Char] Integer
let y = Biz "Goodbye" 6.0   -- y :: Fractional b => Foo [Char] b
let z = Biz True False      -- z :: Foo Bool Bool

레코드 매개 변수가있는 사용자 지정 데이터 형식

이름과 성, 나이, 전화 번호, 거리, 우편 번호 및 도시가있는 Person 유형의 데이터를 작성한다고 가정하십시오.

우리는 쓸 수 있었다.

data Person = Person String String Int Int String String String

지금 우리가 전화 번호를 얻길 원한다면, 우리는 함수를 만들 필요가있다.

getPhone :: Person -> Int
getPhone (Person _ _ _ phone _ _ _) = phone

글쎄, 이건 재미 없어. 매개 변수를 사용하면 더 잘 수행 할 수 있습니다.

data Person' = Person' { firstName     :: String
                       , lastName      :: String
                       , age           :: Int
                       , phone         :: Int
                       , street        :: String
                       , code          :: String
                       , town          :: String }

이제 우리는 함수 phone 얻습니다.

:t phone
phone :: Person' -> Int

우리는 이제 우리가 원하는대로 할 수 있습니다. 예 :

printPhone :: Person' -> IO ()
printPhone = putStrLn . show . phone

패턴 매칭을 통해 전화 번호를 바인딩 할 수도 있습니다.

getPhone' :: Person' -> Int
getPhone' (Person {phone = p}) = p

매개 변수를 쉽게 사용하려면 RecordWildCards



Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow