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:あなたはzip2つの新しい単一要素リストを与えています。あなたは間違いなく、リストを直接渡すことだけを意図していました。
printList :: IO ()
printList = do
putStrLn "Printed Combined List"
print (zip NameList PriorityList)
ああ、でもそれでもうまくいきません。コンパイルすらしません。なんで?変数名は小文字(またはアンダースコア)で始める必要があるためです。そして、あなたは大文字と大文字の両方から始めましNameListたPriorityList。これが、コードの最初のブロックが明らかに機能しなかった理由の1つです。
printList :: IO ()
printList = do
putStrLn "Printed Combined List"
print (zip nameList priorityList)