귀납적 인 정의가 있고 그것을 Haskell에서 데이터 타입으로 정의하고자한다고 가정 해보십시오. 그러나 귀하의 귀납적 정의는 생성 규칙에 '전제 (premisses)'가 특정 구조를 가져야하는 양식의 (많은 귀납적 정의만큼) 것입니다. 예를 들어, 우리는 다음과 같은 정의가 있다고 가정제약 데이터 타입
x
경우는 심지어 정수, 다음T x
이 무기이다,- 을
x
이S x
이 무기 후, 홀수 인 경우. 지금T 5
및S 4
를 생성 할 수 있습니다 나는 하스켈의 데이터 유형 (단일로)이 정의하려면
, 내가 분명히
data Weapon = T Int | S Int
처럼 작성할,이를 위해 작동하지 않습니다 예. 생성자 인수에 제한을 전달하는 자연스러운 방법이 있습니까? 그렇다면 올바른 정의를 내릴 수있는 위의 코드와 비슷한 것을 작성할 수 있습니까? YourModule
을 가져올 때 만에, 사용자가 명시 적으로 T
및 S
을 만들 수 없습니다 이제
module YourModule (Weapon, smartConstruct) where
data Weapon = T Int | S Int
smartConstruct :: Int -> Weapon
smartConstruct x
| even x = T x
| otherwise = S x
:
대부분 스마트 생성자.'T'와'S'를 직접 사용하여 금지하고 전달 된 숫자를 검증하는'newT'와'newS' 함수를 만듭니다. –