Для практики haskell я хочу реализовать игру, в которой студенты/ученики должны в игровой форме выучить алгебру.
В качестве базового типа данных я хочу использовать дерево:
Теперь я хочу определить что-то вроде
data Tree = Leaf {l :: Label, val :: Expression}
| Node {l :: Label, f :: Fun, lBranch :: Tree, rBranch :: Tree}
data Fun = "one of [(+),(*),(-),(/),(^)]"
-- type Fun = Int -> Int
будет работать
Следующее, о чем я думаю, это сделать "эквивалентность" деревьев - так как умножение/прибавление коммутативно и можно упростить сложение до умножения и т.д. всю кучу алгебраических операций. Мне также нужно искать по дереву - по метке, как мне кажется, лучше всего, хороший ли это подход.
Есть идеи, какие метки/фразы искать и как решить "data Fun".