包含不同类型的列表

Let*_*thi 1 haskell

我目前正在编写自己的结构,可以同时处理整数和字符串:

就像是

data Collection = One Int | Two String | Three(Collection)(Collection)
Run Code Online (Sandbox Code Playgroud)

但是,我试图编写一个可以将我的结构转换为列表的函数.

我认为这是不可能的,因为默认情况下这样做:

并[1,2, "测试"]

在控制台中不起作用,因此我的功能必然总是失败?

Aar*_*aid 5

你应该只是定义

type Collection = [Either Int String]
Run Code Online (Sandbox Code Playgroud)

然后,而不是做

l = [1,2,"test"]
Run Code Online (Sandbox Code Playgroud)

你可以做

l :: Collection
l = [Left 1, Left 2, Right "test"]
Run Code Online (Sandbox Code Playgroud)

如果您需要两种以上的类型,则需要定义自己的成员类型.所以你会做这样的事情

data MemberType = MyInt Int | MyString String | MyFloat Float deriving Show
type Collection = [MemberType]
l :: Collection
l = [MyInt 1, MyInt 2, MyString "test", MyFloat 2.2]
Run Code Online (Sandbox Code Playgroud)

deriving Show不是必需的,但能够简单地print l以一种很好的方式打印列表是很好的.