List 在haskell中追加自定义数据类型

List 在haskell中追加自定义数据类型,list,haskell,append,List,Haskell,Append,我正在使用数据类型模拟异构列表: data Nested a = Elem a | List [Nested a] deriving (Show) 这样我就可以表达像List[Elem 1,Elem 2,List[Elem 3,Elem 4],List[Elem 5],Elem 6]这样的数据 在这里,我编写了一个类似于普通append函数的函数,用于连接异构列表: appendn :: Nested a -> Nested a -

我正在使用数据类型模拟异构列表:

data Nested a = Elem a | List [Nested a]
            deriving (Show)
这样我就可以表达像List[Elem 1,Elem 2,List[Elem 3,Elem 4],List[Elem 5],Elem 6]这样的数据

在这里,我编写了一个类似于普通append函数的函数,用于连接异构列表:

appendn                 :: Nested a -> Nested a -> Either String (Nested a)
appendn (Elem a) (List x)       = Left "error: wrong argument"
appendn (List x) (Elem a)       = Left "error: wrong argument"
appendn (List []) (List x)      = Right (List x)
appendn (List (x:xs)) (List y)  = Right (List (x:appendn (List xs) (List y))

但我总是在最后一行得到一个解析错误。我想知道是否可以在这里使用:运算符来附加列表。有人能帮忙吗?谢谢。

数一数左括号和右括号。它们匹配吗?

除了父项不匹配之外,还有一个类型错误。不能将:函数与List参数一起使用,必须将其解包

顺便说一句,为什么不直接使用++函数?

有几点: 您缺少一个案例:如果两个参数都在Elem中

您的函数将生成嵌套的字符串,但在最后一种情况下,定义为:

。。。 附录列表x:xs列表y=右侧列表x:附录列表xs列表y

在这里,我们试图限制:一个值x::嵌套在一个非列表appendn list xs list y::嵌套的字符串a

势解 以下是一些测试用例:

$ appendn (Elem 2) (Elem 3)
= Left "error: wrong argument"

$ appendn (List [Elem 1]) (Elem 2)
= Left "error: wrong argument"

$ appendn (Elem 2) (List [Elem 1])
= Left "error: wrong argument"

$ appendn (List [Elem 1, Elem 2]) (List [])
= Right (List [Elem 1,Elem 2])

$ appendn (List [Elem 1, Elem 2]) (List [Elem 3, Elem 4])
= Right (List [Elem 1,Elem 2,Elem 3,Elem 4])
在这里使用“或”和“可能”有什么不同


希望这有帮助

这个问题似乎给很多人带来了麻烦:谢谢Liam,这真的很有帮助。我只是更熟悉这里的任何一个,我不太了解可能。也许这是一个更好的选择。谢谢
$ appendn (Elem 2) (Elem 3)
= Left "error: wrong argument"

$ appendn (List [Elem 1]) (Elem 2)
= Left "error: wrong argument"

$ appendn (Elem 2) (List [Elem 1])
= Left "error: wrong argument"

$ appendn (List [Elem 1, Elem 2]) (List [])
= Right (List [Elem 1,Elem 2])

$ appendn (List [Elem 1, Elem 2]) (List [Elem 3, Elem 4])
= Right (List [Elem 1,Elem 2,Elem 3,Elem 4])