Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/10.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
遍历haskell中嵌套列表的新数据类型_Haskell_Types_Nested_Nested Lists - Fatal编程技术网

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

遍历haskell中嵌套列表的新数据类型,haskell,types,nested,nested-lists,Haskell,Types,Nested,Nested Lists,我对在哈斯凯尔制作新样式很陌生。这是我创建的类型: data Tag = Table | Td | Tr deriving(Show) data Table = Item Tag [Table] | Text String 标记数据类型还有一个show函数,它将值打印到字符串中。我知道这种类型是递归工作的,因为Table在第一个值中使用[Table]。我希望能够列出所有标记元素和最里面的元素,它们将是文本或空列表 例如: >示例=项目表[Item Td[Item Tr[文本“hello”]]

我对在哈斯凯尔制作新样式很陌生。这是我创建的类型:

data Tag = Table | Td | Tr deriving(Show)
data Table = Item Tag [Table] | Text String
标记数据类型还有一个show函数,它将值打印到字符串中。我知道这种类型是递归工作的,因为Table在第一个值中使用[Table]。我希望能够列出所有标记元素和最里面的元素,它们将是文本或空列表

例如:

>示例=项目表[Item Td[Item Tr[文本“hello”]]
>表格列表示例
[“桌子”、“Td”、“Tr”、“你好”]
这就是我迄今为止所尝试的:

tableList::Table->[String]

tableList(Item tag )=[x | x您的递归类型需要一个递归函数来遍历它:

tableList :: Table -> [String]
tableList (Item tag xs) = show tag:concatMap tableList xs
tableList (Text t) = [t]

类型
标记
的定义在哪里?另外,您的意思是
示例=项目表[Item t[Item r[Text“hello”]]
?@JosephSible我编辑了这篇文章。
data Tag=table | t | r
。Tag有一个show函数,它只打印字符串中的值。我还更改了示例。谢谢你捕捉到了这一点!这不是一个有效的标记定义。数据构造函数不允许以小写字母开头。@JosephSible我的错误,没有编译它以前。