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
2つの新しい単一要素リストを与えています。あなたは間違いなく、リストを直接渡すことだけを意図していました。
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)