【发布时间】:2019-02-27 03:25:43
【问题描述】:
为什么可以在 Haskell 中制作这样的列表:
slist = [ [], [[]], [[],[[]]] ]
据我所知,这里的每个元素都有不同的类型(如数学中的:Ø、{Ø} 等)。 ghci 说:
> :t []
[] :: [t]
> :t [[]]
[[]] :: [[t]]
在形式上,我看到了不同的注释。
换句话说,第一个元素是一个简单的空列表,第二个元素是一个列表 (!) 的列表,依此类推。
怎么了?为什么 Haskell 认为它们是同一类型?
【问题讨论】:
-
如果您想制作这样的“列表”,请考虑
data NestList a = Elem a | Nest [a],然后您可以将Nest [ Nest [], Nest [ Nest [] ] ]写入任意深度。 -
@AJFarmar 也许你的意思是
data NestedList a = Elem a | Nest [NestedList a]。 -
@WillNess 你是对的,但我现在不能改变它!