Dire que j'ai une définition longue structure de donnéesQuelle structure de données choisir pour la généricité mais la sécurité?
data A = A {
x1 :: String
, x2 :: String
...
, x50 :: String
}
Maintenant, j'ai 3 tâches:
- DEVENEZ projet instance de A comme A {x1 = "ceci est x1", ...}
- créer une instance de A partir d'une autre structure de données
- créer une autre instance de données depuis une instance d'un
Les trois tâches impliquent la copie inestimable des étiquettes x1, ..., x50. Une meilleure solution serait une liste générique
[
Foo "x1" aValue1
, Foo "x2" aValue2
...
]
parce qu'il ferait traversal et la création d'un projet beaucoup plus facile (la définition de la liste est le projet déjà). L'inconvénient est que le mappage d'autres structures de données vers et à partir de ce serait plus dangereux, puisque vous perdez la vérification de type statique.
Est-ce que cela a du sens? Existe-t-il une solution générique mais sûre?
Modifier: Pour vous donner une meilleure idée, il s'agit de mapper des données d'entreprise à une représentation textuelle comme des formulaires et des lettres. E.g .:
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
...
}
Ceux-ci se transforment en un flux de texte, représentant les formes réelles. Si je devais créer un formulaire à partir de données fiscales en un passage et l'année suivante, tout champ de formulaire aurait été déplacé, il y aurait par exemple. être un "0.0" errant et je ne saurais pas où il appartient. C'est à cela que sert la structure de données intermédiaire: elle facilite la création de données brouillon.
J'ai donc besoin de mapper les données fiscales réelles à ces données de formulaire intermédiaire; j'ai besoin de mapper ces données de forme à la représentation textuelle du formulaire réel; J'ai besoin de créer des brouillons de données intermédiaires. D'une part je déteste répéter ces étiquettes de données, d'autre part cela me donne une sécurité, que je ne confonds aucune étiquette lors de la cartographie. Y a-t-il une balle d'argent?
Tous les éléments de la structure de données du même type (par exemple les listes) sont-ils tous distingués uniquement par leur index? Le nombre d'étiquettes est-il important? –
Le nombre d'étiquettes est significatif seulement parce que je dois copier beaucoup d'étiquettes de données au moins 3 fois dans mon code. Et j'ai aussi fondamentalement besoin de répéter le nom de l'étiquette en mode brouillon. – LennyStackOverflow
Comment utiliser SYB ou Uniplate? En outre, vous pourriez obtenir un certain kilométrage avec l'extension RecordWildcards dans GHC. (L'affichage d'une plus grande partie de votre programme pourrait aider ici) – aleator