我正在尝试使用Haskell 99问题来学习Elm .在问题7中,您必须定义嵌套列表结构.我试过这个:(基于阅读本文)
type NestedList a = Node a | List (NestedList a)
myList : NestedList number
myList =
[Node 1]
Run Code Online (Sandbox Code Playgroud)
但是我得到以下错误:
The type annotation is saying:
NestedList number
But I am inferring that the definition has this type:
List (NestedList number)
Run Code Online (Sandbox Code Playgroud)
这对我来说没有意义.肯定List (NestedList number)是第二面匹配Node a | List (NestedList a)?
问题#7要求您使用内置的Elm List类型作为NestedList定义的一部分,但是您定义NestedList类型的方式实际上会创建一个被List无意中隐藏内置List类型的构造函数.我认为这种类型的签名实际上会给你你想要的东西:
type NestedList a = Node a | NestedList (List (NestedList a))
Run Code Online (Sandbox Code Playgroud)
您的myList签名现在应该改变,因为它实际上应该返回List的NestedListS:
myList : List (NestedList number)
myList =
[Node 1]
Run Code Online (Sandbox Code Playgroud)
鉴于这个新定义,您可以实现#7要求的嵌套问题.您可以定义更复杂的列表,如下所示:
-- e.g. [1,2, [3, 4, [5]], 6]
myListierList : List (NestedList number)
myListierList =
[Node 1, Node 2, NestedList [Node 3, Node 4, NestedList [Node 5]], Node 6]
Run Code Online (Sandbox Code Playgroud)