Haskell链表清单代数数据类型

GBX*_*XWA 0 haskell linked-list algebraic-data-types

我试图实现一个Haskell代数数据类型链表(或者更准确地说是链接列表的东西,因为我不知道使用Haskell进行内存寻址的任何方法)以及用于转换到Haskell的简单列表的辅助函数输入并写下以下内容:

data LinkedList a = Nill | Node a (LinkedList a) deriving Show

hlistTolinkedList :: [a] -> LinkedList a
hlistToLinkedList [] = Nill
hlistToLinkedList x:[] = Node x Nill
hlistToLinkedList x:xs = Node (x) (stringToLinkedList xs)

linkedListToHlist :: LinkedList Char -> [Char]
linkedListToHlist (Node a b) = a ++ linkedListToString b
linkedListToHlist Nill = ''
Run Code Online (Sandbox Code Playgroud)

我得到以下编译器错误:

@5:1-5:21 Parse error in pattern: hlistToLinkedList
Run Code Online (Sandbox Code Playgroud)

我不确定我的功能有什么问题.有人请解释一下吗?

Dan*_*ner 7

使其编译所需的最小变化是简单地为非空列表的模式添加一些括号; 例如

hlistToLinkedList (x:xs) = ...
Run Code Online (Sandbox Code Playgroud)

通过要求括号表示复杂模式,编译器不需要知道每个构造函数需要多少个参数; 降低上下文敏感性和促进单独编译的重要技巧.