LINUX.ORG.RU

История изменений

Исправление 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