generated at
Data.Map
HaskellのMap
containers package.yaml に追加して使う




fromList :: Ord k => [(k, a)] -> Map k a
連想配列の初期化
hs
-- ↓key ↓value env :: Map String String env = fromList [("hoge", "42"), ("piyo", "100")] -- 初期化
リストからMapを作る
リストの中身はkey-valueのタプル

toList :: Map k a -> [(k, a)]
MapをListにする



lookup :: Ord k => k -> Map.Map k a -> Maybe a
連想配列から値を取得
hs
Map.lookup "hoge" env
返り値はMaybe
key-valueが存在すれば Just 42
なかったら Nothing


(!) :: Ord k => Map k a -> k -> a
Maybeではなく直撃で値を得る
値がなかったら落ちる




keys :: Map k a -> [k]
keyのリストを得る

elems :: Map k a -> [a]
valueのリストを得る



insert :: Ord k => k -> a -> Map k a -> Map k a
key-valueを追加
hs
let env2 = insert "foo" "500" env print env2
あくまでもimmutableなので、元の連想配列に追加されるわけではない



delete :: Ord k => k -> Map k a -> Map k a
key-valueを削除
hs
let env3 = delete "hoge" env print $ lookup "hoge" env3 -- > Nothing
あくまでもimmutableなので、元の連想配列から削除されるわけではない


map :: (a -> b) -> Map.Map k a -> Map.Map k b
Map版のmap
値の方に操作する
hs
print $ Map.map (++ "1") env -- > fromList [("hoge","421"),("piyo","1001")]


mapKeys :: Ord k2 => (k1 -> k2) -> Map.Map k1 a -> Map.Map k2 a
mapのkeyに操作する版
hs
print $ Map.mapKeys (++ "1") env -- > fromList [("hoge1","42"),("piyo1","100")]


更新系
update :: Ord k => (a -> Maybe a) -> k -> Map k a -> Map k aSource
updateWithKey :: Ord k => (k -> a -> Maybe a) -> k -> Map k a -> Map k a
updateLookupWithKey :: Ord k => (k -> a -> Maybe a) -> k -> Map k a -> (Maybe a, Map k a)
alter :: Ord k => (Maybe a -> Maybe a) -> k -> Map k a -> Map k a

insertとadjustの違い


簡単な実装例

使い所
関数を実装するときの環境


Data.MapData.Setの統一interface



参考
よんでないけど