Comment réduire la duplication de code lorsqu'il s'agit de types de somme récursive

Je travaille actuellement sur un interpréteur simple pour un langage de programmation et j'ai un type de données comme celui-ci: data Expr = Variable String | Number Int | Add [Expr] | Sub Expr Expr Et j'ai de nombreuses fonctions qui font des choses simples comme: -- Substitute a value for a...