printList :: IO ()
printList = do putStrLn "Printed Combined List"
zip [NameList][PriorityList]
这段代码有很多问题。
您看到的解析错误是因为 do 块没有正确对齐。最后zip
一行的 必须与putStrLn
前一行的 对齐。所以要么
printList :: IO ()
printList = do putStrLn "Printed Combined List"
zip [NameList][PriorityList]
或者
printList :: IO ()
printList = do
putStrLn "Printed Combined List"
zip [NameList][PriorityList]
但这仍然行不通。printList
被声明为一个 IO 动作,这意味着 do 块的最后一行也必须是一个 IO 动作......但zip
会产生一个列表。你可能是这个意思:
printList :: IO [(String, Int)]
printList = do
putStrLn "Printed Combined List"
return (zip [NameList][PriorityList])
但这只会在您直接从 ghci 提示符运行时打印出结果。最好明确地打印出来:
printList :: IO ()
printList = do
putStrLn "Printed Combined List"
print (zip [NameList][PriorityList])
但它仍然不会做你想做的事!因为NameList
并且PriorityList
大概是列表。你想要拉链在一起。但这不是您要提供的zip
:您要提供zip
两个新的单元素列表。毫无疑问,您只是打算直接通过列表。
printList :: IO ()
printList = do
putStrLn "Printed Combined List"
print (zip NameList PriorityList)
哦,但它仍然无法正常工作。甚至不会编译。为什么是这样?因为变量名必须以小写字母(或下划线)开头。NameList
而且您已经开始PriorityList
使用大写字母。这就是为什么您的第一个代码块显然无法工作的一个原因。
printList :: IO ()
printList = do
putStrLn "Printed Combined List"
print (zip nameList priorityList)