我目前正在编写自己的结构,可以同时处理整数和字符串:
就像是
data Collection = One Int | Two String | Three(Collection)(Collection)
Run Code Online (Sandbox Code Playgroud)
但是,我试图编写一个可以将我的结构转换为列表的函数.
我认为这是不可能的,因为默认情况下这样做:
并[1,2, "测试"]
在控制台中不起作用,因此我的功能必然总是失败?
你应该只是定义
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以一种很好的方式打印列表是很好的.