Как уменьшить дублирование кода при работе с рекурсивными типами сумм

В настоящее время я работаю над простым интерпретатором языка программирования, и у меня есть такой тип данных: data Expr = Variable String | Number Int | Add [Expr] | Sub Expr Expr И у меня есть много функций, которые делают простые вещи, такие как: -- Substitute a value for a variable...