HashTable は IO 型なので難しいから平衡木。
> :m +Data.Map > let t = empty > t > :t t --=> t :: Map k a > t --=> fromList []
要素を挿入してみる。
> let t2 = insert "key" "value" t
> let t3 = insert "1" "1234567890" t2
> t3
fromList [("1","1234567890"),("key","value")]
> let t4 = insert "k" "fuga" t3
> t4
fromList [("1","1234567890"),("k","fuga"),("key","value")]
検索してみる。Prelude.lookup もあるので区別が必要。
> Data.Map.lookup "k" t4
Just "fuga"
! による要素へのアクセス。
> t4 ! "1"
"1234567890"
> t4 ! "k"
"fuga"
adjust 関数による修正。第1引数の関数で、修正、置き換えが出来る。
> adjust ("new " ++) "k" t4
fromList [("1","1234567890"),("k","new fuga"),("key","value")]
> adjust (\x ->"qqq") "k" t4
fromList [("1","1234567890"),("k","qqq"),("key","value")]
> adjust (\_ ->"++++++++++++++++") "k" t4
fromList [("1","1234567890"),("k","++++++++++++++++"),("key","value")]
> let t5 = adjust (\_ ->"++++++++++++++++") "k" t4
> t5
fromList [("1","1234567890"),("k","++++++++++++++++"),
("key","value")]
> let t6 = adjust ("add string "++) "key" t5
Prelude Data.Map> t6
fromList [("1","1234567890"),("k","++++++++++++++++"),
("key","add string value")]
delete 関数で削除。
> let t7 = delete "k" t6
> t7
fromList [("1","1234567890"),("key","add string value")]