J'ai un constructeur de type Ast, paramétré par le type d'identifiant. En utilisant les extensions DeriveFunctor, DeriveFoldable et DeriveTraversable , il est possible de créer automatiquement les instances appropriées.Dérivation d'extensions avec types multiparamètres
Maintenant, je trouve qu'il est utile d'introduire plus de paramètres de type, mais malheureusement, la méthode ci-dessus n'est pas à l'échelle . Idéalement, je voudrais être en mesure d' envelopper mon type Ast dans les types de sélection qui me permettrait de fmap à les paramètres de type appropriés. Existe-t-il un moyen d'obtenir un effet similaire sans avoir à définir les instances moi-même?
modifier:
Voici un petit exemple de ce que l'Ast originale ressemblait à:
Ast id = Ast (FuncDef id)
deriving (Show, Functor, Foldable, Traversable)
FuncDef id = FuncDef id [Fparam id] (Block id)
deriving (Show, Functor, Foldable, Traversable)
Block id = Block [Stmt id]
deriving (Show, Functor, Foldable, Traversable)
..
Pouvez-vous ajouter une version réduite de 'Ast' ainsi que quelques-uns des paramètres de type et typeclasses vous voulez dérivé? – Alec
C'est une idée géniale. Mon instinct me dit que vous êtes au-delà du pouvoir du mécanisme de dérivation automatique, et il est temps de commencer à regarder [génériques] (https://wiki.haskell.org/Generics). – luqui
@luqui C'est ma conclusion aussi.Les extensions de langage Deriving sont là pour une raison pour laquelle elles ne semblent pas assez puissantes dans ce cas. –