Итерация по новому типу данных вложенных списков в haskell - PullRequest
3 голосов
/ 22 сентября 2019

Я новичок в создании новых типов в Haskell.Это мой тип, который я создал:

data Tag = Table | Td | Tr deriving(Show)
data Table = Item Tag [Table] | Text String

Тип данных Tag также имеет функцию show, где он печатает значения в строку.Я знаю, что этот тип работает рекурсивно, потому что Table использует [Table] в первом значении.Я хочу иметь возможность составить список всех элементов тега и самого внутреннего элемента, который будет текст или пустой список.

Например:

>example = Item Table [Item Td [Item Tr [Text "hello"]]]
>tableList example
["Table","Td","Tr","hello"]

Это то, что я пробовал до сих пор:

tableList :: Table -> [String]
tableList (Item tag _) = [x | x <- show tag]

Но это показывает только "table".Я не уверен, как получить доступ ко всем внутренним Tag значениям.

1 Ответ

5 голосов
/ 22 сентября 2019

Вашему рекурсивному типу нужна рекурсивная функция для его обхода:

tableList :: Table -> [String]
tableList (Item tag xs) = show tag:concatMap tableList xs
tableList (Text t) = [t]
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...