는일반성을 위해 어떤 데이터 구조를 선택해야하지만 안전합니까?
data A = A {
x1 :: String
, x2 :: String
...
, x50 :: String
}
는 이제 3 개 태스크가 나가 긴 데이터 구조의 정의를 말한다 :
- 이 같은 초안 인스턴스 생성 {X1 내지 = "이 X1로", ...}
- 는
- 는
세 가지 작업은 lable x1, ..., x50의 완고한 복사를 포함합니다. 가 통과하고 훨씬 쉽게 초안을 작성을 할 것이기 때문에 더 나은 솔루션은 일반적인 목록을
[
Foo "x1" aValue1
, Foo "x2" aValue2
...
]
일 것 (목록 정의는 이미 초안). 단점은 정적 유형 검사를 잃어 버리기 때문에 다른 데이터 구조를 여기 저기에 매핑하는 것이 더 위험 할 수 있다는 것입니다.
의미가 있습니까? 일반적이고 안전한 솔루션이 있습니까?
편집 : 더 나은 아이디어를 제공하기 위해 비즈니스 데이터를 양식 및 문자와 같은 텍스트 표현에 매핑하는 것이 좋습니다. 예 :
data TaxData = TaxData {
taxId :: String
, income :: Money
, taxPayed :: Money,
, isMarried :: Bool
...
}
data TaxFormA = TaxFormA {
taxId :: Text
, isMarried :: Text
...
}
data TaxFormB = TaxFormB {
taxId :: Text
, taxPayedRounded :: Text
...
}
이러한 것들은 실제 양식을 나타내는 텍스트 스트림으로 변환됩니다. 한 번에 세금 데이터로 양식을 작성하고 내년에 양식 필드가 이동 한 경우, 예를 들어 길잃은 "0.0"이되어서 그것이 어디에 속하는지 모르겠다. 이것이 바로 중간 데이터 생성을위한 것입니다. 초안 데이터를 쉽게 만들 수 있습니다.
그래서 실제 TaxData를 중간 양식 데이터에 매핑해야합니다. 그 양식 데이터를 실제 양식 텍스트 표현에 맵핑해야합니다. 중간 양식 데이터 초안을 작성해야합니다. 한 손으로 나는 그 데이터 레이블을 반복하는 것을 싫어한다. 반면에 그것은 매핑하는 동안 어떤 레이블도 혼동하지 않는다는 점에서 안전하다. 은색 탄환이 있습니까?
동일한 유형 (예 : 목록)의 데이터 구조의 모든 요소가 모두 색인으로 만 구별됩니까? 레이블의 수는 어떤 식 으로든 중요합니까? –
레이블의 수는 현재 중요한데, 왜냐하면 현재 코드에서 적어도 3 번 이상 많은 데이터를 복사해야하기 때문입니다. 그리고 나는 또한 기본적으로 드래프트 모드에서 라벨 이름을 반복해야합니다. – LennyStackOverflow
SYB 또는 유니 플레이트 사용은 어떻습니까? 또한 GHC에서 RecordWildcards 확장으로 마일리지를 얻을 수 있습니다. (더 큰 부분을 게시하는 프로그램이 여기에 도움이 될 수 있습니다.) – aleator