遍历haskell中嵌套列表的新数据类型

lex*_*449 3 haskell types nested nested-lists

我是在Haskell开发新类型的新手。这是我创建的类型:

data Tag = Table | Td | Tr deriving(Show)
data Table = Item Tag [Table] | Text String
Run Code Online (Sandbox Code Playgroud)

Tag数据类型还具有show函数,可将值打印到字符串中。我知道此类型可以递归工作,因为Table在第一个值中使用[Table]。我希望能够列出所有Tag元素和最里面的元素,这些元素将是Text或一个空列表。

例如:

data Tag = Table | Td | Tr deriving(Show)
data Table = Item Tag [Table] | Text String
Run Code Online (Sandbox Code Playgroud)

到目前为止,这是我尝试过的:

>example = Item Table [Item Td [Item Tr [Text "hello"]]]
>tableList example
["Table","Td","Tr","hello"]
Run Code Online (Sandbox Code Playgroud)

但这仅表明"table"。我不确定如何访问所有内部Tag值。

Jos*_*ica 5

您的递归类型需要一个递归函数来遍历它:

tableList :: Table -> [String]
tableList (Item tag xs) = show tag:concatMap tableList xs
tableList (Text t) = [t]
Run Code Online (Sandbox Code Playgroud)