История изменений
Исправление
Crocodoom,
(текущая версия)
:
Речь идёт не об обходе дерева в смысле RoseTree, а об обходе дерева в смысле дерева конструкторов некоторого типа. Дерево конструкторов любого данных можно записать в строчку (и именно так мы и задаем их в хаскеле), и эту строчку можно прочитать слева направо.
Вместо RoseTree я могу поставить какой угодно конструктор, или даже разные конструкторы (допустим у нас такой вот страшный тип данных с кучей конструкторов).
Смотрите:
λ> let t = A "1" [B "2" [C "3" [], D "4" []], E "5" [F "6" [], G "7" []]]
λ> toList t
["1","2","3","4","5","6","7"]
Тут вообще не важно, что такое эти A, B, C, ...
Но если есть инстанс Foldable для этого типа, то toList t
обязан возвращать ["1","2","3","4","5","6","7"]
. Вот так я понимаю фразу
List of elements of a structure, from left to right
Исходная версия
Crocodoom,
:
Речь идёт не об обходе дерева в смысле RoseTree, а об обходе дерева в смысле дерева конструкторов некоторого типа. Дерево конструкторов любого данных можно записать в строчку (и именно так мы и задаем их в хаскеле), и эту строчку можно прочитать слева направо.
Вместо RoseTree я могу поставить какой угодно конструктор, или даже разные конструкторы (допустим у нас такой вот страшный тип данных с кучей конструкторов).
Смотрите:
λ> let t = A "1" [B "2" [C "3" [], D "4" []], E "5" [F "6" [], G "7" []]]
λ> toList t
["1","2","3","4","5","6","7"]
Тут вообще не важно, что такое эти A, B, C, ...
Но если есть инстанс Foldable для этого типа, то toList t обязан возвращать ["1","2","3","4","5","6","7"]
. Вот так я понимаю фразу
List of elements of a structure, from left to right