Как получить конструктор как функцию из аргумента (G) ADT в Haskell? Можно ли сделать что-то вроде этого?Как получить конструктор как функцию из аргумента (G) ADT в Haskell?
data Ex1 = C1 Int | C2 Int -- | .....
| C3
fun :: Ex1 -> Ex1
fun C3 = C3
fun (c i) = c $ i^2
Это не подходит для меня.
fun (C1 i) = C1 $ i^2
fun (C2 i) = C2 $ i^2
Почему соответствия на конструкторах "не подходит? –
Потому что много конструкторов. Я не хочу дублировать большой код. По факту. данные AST = Imm Int | Arg Int | Добавить AST AST | Суб AST AST | Мул АСТ AST | Div AST AST ...... –
Большие типы данных - это что-то вроде запаха кода. Возможно, стоит попытаться упростить дизайн вашего АСТ. –