Таким образом у меня есть эта структура данных:Бинарные деревья Haskell
class ordering a where
order :: a-> Int
И я хочу, чтобы создать дерево поиска, где каждый узел представляет собой список элементов, определяется их собственным номером заказа (корень 1, корень левого поддерева равно 2, корень правого поддерева равен 3 и т. д.). Каждый тип данных, вставленный в дерево, имеет связанный с ним номер «порядка», который имеет значение только для «целей вставки дерева», и если он равен 1, он остается в корне, если он равен двум, он остается на левой стороне дерева, и так далее ..
Вот моя попытка это:
data Tree a = EmptyTree
| Node a order a (Tree [a]) (Tree [a]) deriving (Show, Read, Eq)
Что я сделал, имеет смысл для меня, но, видимо, не так, но если честно я есть не знаю, почему ...
Я новичок в Haskell, и я изо всех сил пытаюсь выучить язык, поэтому я ценю любую помощь от вас, ребята!
Возможный дубликат [Указание ограничений класса в конструкторах значений] (http://stackoverflow.com/questions/4810274/specifying-class-constraints-in-value-constructors) –
Я думаю, проблема в том, что вы смешиваете значение _types_, 'data', _type classes_ и _classes в языках OO (что совершенно нормально для начинающих Haskellers). Прочитайте некоторые [книги (ы) на Haskell] (http://www.haskell.org/haskellwiki/Books#Textbooks), это, вероятно, будет самым эффективным решением вашей проблемы. – leftaroundabout
1) имена классов должны быть написаны заглавными буквами. 2) 'Ordering' является занятым именем в Prelude, попробуйте использовать другое имя для класса 3) данные и класс связаны через' instance' – viorior