Haskell Language
일반화 된 대수 데이터 유형
수색…
기본 사용법
GADTs
확장을 사용하면 일반 데이터 선언 외에 다음과 같이 일반화 된 대수 데이터 형식을 선언 할 수도 있습니다.
data DataType a where
Constr1 :: Int -> a -> Foo a -> DataType a
Constr2 :: Show a => a -> DataType a
Constr3 :: DataType Int
GADT 선언은 데이터 유형에 포함 된 모든 생성자의 유형을 명시 적으로 나열합니다. 일반 데이터 유형 선언과 달리 생성자의 유형은 궁극적으로 데이터 형식이 일부 인수에 적용되는 결과를 가져 오는 N-ary (nullary 포함) 함수가 될 수 있습니다.
이 경우 DataType
유형에는 Constr1
, Constr2
및 Constr3
세 가지 생성자가 있다고 선언했습니다.
Constr1
생성자는 일반 데이터 선언을 사용하여 선언 된 구문과 다르지 않습니다. data DataType a = Constr1 Int a (Foo a) | ...
그러나 Constr2
에는 a
에 Show
인스턴스가 있어야하며, 생성자를 사용할 때는 인스턴스가 필요합니다. 반면에 패턴 매칭을 할 때, a
가 Show
의 인스턴스라는 사실은 범위에 포함되므로 다음과 같이 작성할 수 있습니다.
foo :: DataType a -> String
foo val = case val of
Constr2 x -> show x
...
점을 유의 Show a
제약 함수의 형태로 표시하고, 오른쪽의 코드에서만 볼 수 없습니다 ->
.
Constr3
입력 보유 DataType Int
타입의 값마다 즉, DataType a
A는 Constr3
,이 알려져있다 a ~ Int
. 이 정보 역시 패턴 일치로 복구 할 수 있습니다.
Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow