在Haskell中构建数据类型列表

And*_*ndy 5 syntax haskell list data-structures

我真的很困惑你应该如何从haskell中的类型类中获取数据.我正在寻找C背景,所以发现你不能只访问数据真的很困难.我所拥有的是这样的:

data MyType = MyType String deriving (Show)


display :: [MyType] -> IO ()
display ((MyType name):xs) = do
       display xs
       putStr name
Run Code Online (Sandbox Code Playgroud)

基本上我在这里想要访问'name',但它似乎不起作用.我可以通过在代码中引用对象来访问类型类实例中的数据,还是必须将其内容映射到变量?如果是这样怎么样?

关于这方面的好教程的链接将不胜感激,我已经读过'了解你的Haskell非常好'但是当我试图偏离给出的例子时,我总是需要知道要完成它.-一个

Don*_*art 6

我想你可能只是缺少一些将它们联系在一起的小块.

首先,你有一个完美的数据类型MyType,它包含字符串:

data MyType = MyType String deriving (Show)
Run Code Online (Sandbox Code Playgroud)

现在,您想要编写一个函数来遍历此类型的列表,并在每个元素前进时打印它们.我们通过列表数据类型的递归来完成此操作.

由于列表有两种情况,空列表[]和缺点情况(:),我们有两个分支:

display :: [MyType] -> IO ()
display []                 = return ()
display ((MyType name):xs) = do
       putStrLn name
       display xs
Run Code Online (Sandbox Code Playgroud)

现在,我认为你可能会陷入困境的是建立一些这种类型的数据.您已经知道如何通过模式匹配将其拆分,并使用几乎相同的语法构建数据.这是一个列表MyType:

table = 
    [ MyType "john"
    , MyType "don"
    , MyType "eric"
    , MyType "trevor"
    ]
Run Code Online (Sandbox Code Playgroud)

最后,您可以运行您的程序 main

main = display table
Run Code Online (Sandbox Code Playgroud)

注意,这里没有类型类,只是代数数据类型(随附data).