1
유형 A와 B가 선언 된 모듈 A와 모듈 B가 있다고합시다. 우리는 슈퍼는 다음 코드에서와 같은 A 또는 B 중 하나입니다 유형 말하고 싶은 슈퍼 모듈에서 :가져온 모듈의 유형으로 데이터 유형을 작성하십시오.
-- module A
data A = A String
-- module B
data B = B Int
-- module Super
data Super = A.A
| B.B
을하지만 우리는 데이터 생성자에서 전체 자격을 갖춘 데이터 유형을 사용할 수 없기 때문에이 작동하지 않습니다 (오류 입니다 : "위치 바인딩에 규정 된 이름") 우리는 아래와 같이 전체 지정의 이름을 넣어하지 않는 경우, A 형 및 B는하지 그 모듈 A와 B에서 있습니다
-- module Super
data Super = A
| B
는 지금까지 내 솔루션은 다음과 같이하는 것입니다
-- module Super
data Super = A A.A
| B B.B
더 좋은 방법이 있나요? I 타입 클래스를
시를 사용할 필요가 있는지 확실하지 않다 : 당신의 이름의 과도한 증식없이 멀리 얻을 수있는 경우 내 목표는
let mySuperList = [ B, A ] :: [Super]
나는 할 수 없다. 더 많은 타입이 올 것이다. –
@ Erèbe 그런 다음 자신의 타입을 정의한다. 데이터 Union = A A.A | B B.B | C C.C | D D.D | ... '하고 필요에 따라 확장하십시오. 이는 '이터'중첩 (즉, 어느 쪽이라도 (어느 쪽이라도 B (모두 C D))보다 훨씬 유용합니다. N 유형으로이 문제를 해결하는 방법을 다루는 [데이터 유형 알라 카르테] (http://www.cs.ru.nl/~W.Swierstra/Publications/DataTypesALaCarte.pdf) 보고서를 검토 할 수도 있습니다 ,이 방법에는 몇 가지 중요한 이론과 계산 오버 헤드가 있음을 명심 하긴하지만. – bheklilr
나는 그 종이를 읽을 것이다. Merci bien à toi –