我正在尝试使用此处的代码创建和使用字典:
import Data.List (lookup)
insert :: Eq a => (a,b) -> [(a,b)] -> [(a,b)]
insert (a,b) [] = [(a,b)]
insert (a,b) ((c,d):rest) = if a == c
then (a,b) : rest
else (c,d) : insert (a,b) rest
dict :: [(String, String)]
dict = [("", "")]
main = do
insert ("onekey", "onevalue") dict
print dict
print $ lookup "onekey" dict
但我收到以下错误:
$ runghc rndict.hs
rndict.hs:22:1: error:
• Couldn't match expected type ‘IO t0’ with actual type ‘[()]’
• In the expression: main
When checking the type of the IO action ‘main’
rndict.hs:24:9: error:
• Couldn't match type ‘IO’ with ‘[]’
Expected type: [()]
Actual type: IO ()
• In a stmt of a 'do' block: print dict
In the expression:
do { insert ("onekey", "onevalue") dict;
print dict;
print $ lookup "onekey" dict }
In an equation for ‘main’:
main
= do { insert ("onekey", "onevalue") dict;
print dict;
print $ lookup "onekey" dict }
rndict.hs:25:9: error:
• Couldn't match type ‘IO’ with ‘[]’
Expected type: [()]
Actual type: IO ()
• In a stmt of a 'do' block: print $ lookup "onekey" dict
In the expression:
do { insert ("onekey", "onevalue") dict;
print dict;
print $ lookup "onekey" dict }
In an equation for ‘main’:
main
= do { insert ("onekey", "onevalue") dict;
print dict;
print $ lookup "onekey" dict }
有什么问题,在 Haskell 中使用字典的正确方法是什么?