Вам необходимо использовать let
, чтобы связать новый словарь с именем:
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
let d = insert ("onekey", "onevalue") dict
print d
print $ lookup "onekey" d
Вы спрашиваете о вставке нескольких элементов. Для этого вы можете использовать сгиб, чтобы написать функцию с именем insertMany
. Возможно, вам следует использовать foldl'
, но я оставлю это как упражнение, чтобы выяснить, почему.
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
insertMany :: Eq a => [(a,b)] -> [(a,b)] -> [(a,b)]
insertMany elements dict =
foldl (flip insert) dict elements
dict :: [(String, String)]
dict = [("", "")]
main = do
let d = insert ("onekey", "onevalue") dict
print d
print $ lookup "onekey" d
print $ insertMany [("onekey", "newvalue"), ("anotherkey", "anothervalue")]
dict