Pour la représentation d'un arbre de syntaxe DSL, j'ai des types de données qui représentent cet arbre. À plusieurs endroits, au sein de cet arbre, je reçois un certain nombre de sous-éléments qui sont facultatifs et/ou qui ont une multiplicité de «*». Donc, un type de données pourrait ressembler à quelque chose commeHaskell: Définition d'une interface appropriée pour les types de données avec de nombreux champs
data SpecialDslExpression = MyExpression String [Int] Double [String] (Maybe Bool)
Ce que je cherche est la possibilité de construire un tel type sans avoir à spécifier tous les paramètres, en supposant que j'ai un défaut valable pour chacun d'eux. Le scénario d'utilisation est tel que j'ai besoin de créer de nombreuses instances du type avec toutes sortes de combinaisons de paramètres donnés ou omis (la plupart du temps deux ou trois), mais très rarement tous. Le regroupement des paramètres en sous-types ne m'amènera pas loin car les combinaisons de paramètres ne suivent pas un modèle qui aurait une amélioration de la segmentation.
Je pourrais définir des fonctions avec différentes combinaisons de paramètres pour créer le type en utilisant les valeurs par défaut pour le reste, mais je pourrais en retrouver un certain nombre qui deviendraient difficile à nommer correctement, car il pourrait ne pas être possible de donner un nom propre à l'idée de createWithFirstAndThirdParameter
dans un contexte donné. Donc, à la fin, la question se résume à: est-il possible de créer un tel type de données ou une abstraction qui me donnerait quelque chose comme des paramètres facultatifs que je peux spécifier ou omettre à souhait?
Enregistrements + une instance par défaut – jozefg
Peut-être que votre expression DSL pourrait devenir un monoid? – bennofs