다음 코드의 경우 storePhone 함수가 Int를 저장하는 전화 번호 유형 (HomePhone 또는 WorkPhone)을 어떻게 지정합니까?대수 데이터 형식에서 유형 동의어를 사용하는 방법은 무엇입니까?
type HomePhone = Int
type WorkPhone = Int
data Phone = HomePhone
| WorkPhone
storePhone :: int -> Phone
storePhone num = num
main :: IO()
main = print $ storePhone 12345678
이 질문은 내가 수행중인 부수 프로젝트에 대한 간단한 질문이었습니다. 파일을 관련 데이터 형식 (예 : 전화 유형 샘플)으로 구문 분석하는 모듈이 있습니다. 모든 데이터는 Double이지만 다른 의미 론적 의미가 있습니다. 다른 모듈에서는 데이터를 사용하는 메소드가 있습니다. 각 메서드는 데이터 형식 (HomePhone, WorkPhone이라고도 함)의 다른 순열을 인수로 사용합니다. HomePhone과 WorkPhone 데이터 형식 또는 심지어 newtype을 만들 수도 있었지만 데이터를 사용한 메서드가 패턴 매칭과 물건을 많이 사용하여 더러워 보일 수있었습니다. 그래서 좀 더 우아하고 안전하게 입력 할 수 있도록 데이터 유형 (일명 전화)을 단순화 할 수 있는지 궁금합니다. 건배! 다음과 같이해야할까요?
type HomePhone = Int
type WorkPhone = Int
data Phone = HomePhone HomePhone
| WorkPhone WorkPhone
컴파일도 되니? 컴파일러는 오류 및 경고에서 유용한 정보를 많이 줄 수 있습니다. – Yuras